home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / game / 2play / FrontalAssauSr.lha / FrontalAssault.AMOS / FrontalAssault.amosSourceCode < prev    next >
AMOS Source Code  |  1996-10-22  |  218KB  |  7,931 lines

  1. ' IMPORTANT: Change line 247 to point towards your Frontal Assault installation. 
  2.  
  3. ' Frontal Assault v2.80 by James Daniels.
  4. ' Started: Mid-February '96. Currently consists of almost 8000 lines of code!
  5. ' Note: When saving, banks 1,2,3 and 22 can be erased. 
  6.  
  7. ' v1.00 - First 'complete' version(!) (3/6/96)   
  8. ' v1.01 - Decrunching picture made MUCH more compact (was >45K, now <1K!) (3/6/96)   
  9. ' v1.02 - Instructions corrected (4/6/96)
  10. ' v1.03 - Scroll around tank bug corrected (4/6/96)
  11. ' v1.04 - Transporter bug corrected (4/6/96) 
  12. ' v1.05 - Prices optimized (4/6/96)
  13. ' v1.06 - New weapons: Mega riot charge, mountain mover and mega roller (4/6/96) 
  14. ' v1.07 - Major bug fixed; main game loop too big - crash! AMOS' fault, not mine! (4/6/96)   
  15. ' v1.08 - Strange screen corruption bug fixed. Turbo extension's fault, definitely not mine! (4/6/96)  
  16. ' v1.09 - Decrunching information added (4/6/96) 
  17. ' v1.10 - New weapons: Heavy fountain and mega fountain (4/6/96) 
  18. ' v1.11 - Computer players now use the new weapons! (4/6/96) 
  19. ' v1.12 - Gave fragmenting shells more gunpowder (5/6/96)  
  20. ' v1.13 - Optimized prices (5/6/96)
  21. ' v1.14 - New weapons: Burrower and pile driver (5/6/96) 
  22. ' v1.15 - Computer players now use the new weapons! (5/6/96) 
  23. ' v1.16 - Turbo mode added (5/6/96)
  24. ' v1.17 - Instructions updated (5/6/96)
  25. ' v1.18 - Turbo mode bugs fixed (5/6/96) 
  26. ' v1.19 - Turbo mode speeded up even more! (5/6/96)
  27. ' v1.20 - ANOTHER big bug found. AMOS' fault! (5/6/96) 
  28. ' v1.21 - Prices optimized (6/6/96)
  29. ' v1.22 - Computer players think quicker and are more intelligent (20/6/96)
  30. ' v1.23 - Aiming bug corrected (20/6/96) 
  31. ' v1.24 - Training mode added (20/6/96)
  32. ' v1.25 - Instructions updated (20/6/96) 
  33. ' v1.26 - Jerky power bar fixed (20/6/96)
  34. ' v1.27 - Instructions improved (20/6/96)
  35. ' v1.28 - Dirt drop bug fixed (20/6/96)
  36. ' v1.29 - Minor correction to instructions, default configuration altered (20/6/96)
  37. ' v1.30 - Play order is now displayed prior to the match (24/6/96) 
  38. ' v1.31 - Time of previous round added and bug in turbo mode fixed (25/6/96) 
  39. ' v1.32 - Method of displaying results improved (25/6/96)
  40. ' v1.33 - Apex Designs audio synchonisation improved (25/6/96) 
  41. ' v1.34 - New turbo mode: CPU's only (25/6/96) 
  42. ' v1.35 - Instructions updated (25/6/96) 
  43. ' v1.36 - Quit now asks for confirmation in its own inimatiable/irritating way (25/6/96) 
  44. ' v1.37 - Minor alteration to instructions (29/6/96) 
  45. ' v1.38 - Decrunching picture altered (1/7/96)   
  46. ' v1.39 - FIRST RELEASE! Sent to CU-Amiga magazine (1/7/96)
  47. ' v1.40 - First shareware version (1/7/96) 
  48. ' v1.41 - Decrunching picture altered (1/7/96) 
  49. ' v1.42 - Computer player weapon selection improved (1/7/96) 
  50. ' v1.43 - Tune selector added - now 3 disks big! (3/7/96)  
  51. ' v1.44 - Disk requester added (3/7/96)
  52. ' v1.45 - Loading progress meter added (3/7/96)
  53. ' v1.46 - Requester improved and bug-fixed (3/7/96)  
  54. ' v1.47 - Partial bitmap importing implimented - 2 levels (3/7/96) 
  55. ' v1.48 - Level selector speeded up (4/7/96) 
  56. ' v1.49 - 4 new levels (4/7/96)
  57. ' v1.50 - New tune added and default configuration altered (4/7/96)
  58. ' v1.51 - Level previews now better (4/7/96) 
  59. ' v1.52 - 4 new levels (5/7/96)
  60. ' v1.53 - Bitmap levels are now tested for validity (5/7/96) 
  61. ' v1.54 - Level preview now renders in background (5/7/96) 
  62. ' v1.55 - Frontal assault logo now detonates impressively (!) (5/7/96) 
  63. ' v1.56 - Frontal assault logo now beams in not-so-impressively (!!) (5/7/96)
  64. ' v1.57 - 3 new levels added by my brother (5/7/96)
  65. ' v1.58 - Minor bug fixed (6/7/96) 
  66. ' v1.59 - Intro logo improved again (6/7/96) 
  67. ' v1.60 - Minor bugs fixed (6/7/96)
  68. ' v1.61 - Partial support for 8 colour levels added (6/7/96) 
  69. ' v1.62 - Partial support for Worms levels added (8/7/96)
  70. ' v1.63 - Minor bugs with 8 colour version fixed (8/7/96)
  71. ' v1.64 - Loads more levels added - now a total of 60! (8/7/96)
  72. ' v1.65 - More minor bugs fixed (8/7/96) 
  73. ' v1.66 - More minor bugs fixed and duplicated level removed (8/7/96)
  74. ' v1.67 - "Loading..." changed to "Accessing..." (14/7/96) 
  75. ' v1.68 - Disk labelling changed to numbers (14/7/96)
  76. ' v1.69 - Multiple level disk support - now 5 disks big! (14/7/96) 
  77. ' v1.70 - Bugs fixed (14/7/96) 
  78. ' v1.71 - Generated levels' appearance vastly improved (14/7/96) 
  79. ' v1.72 - New level style added - Ice (15/7/96)
  80. ' v1.73 - New level style added - Desert (15/7/96) 
  81. ' v1.74 - Dirt drop bug fixed (15/7/96)
  82. ' v1.75 - Shot colour bug fixed (15/7/96)
  83. ' v1.76 - Change no. of rounds bug fixed (15/7/96) 
  84. ' v1.77 - Dotty explosions bugs fixed (15/7/96)
  85. ' v1.78 - Lightning bug fixed (15/7/96)
  86. ' v1.79 - Dirt drop routine updated (15/7/96)
  87. ' v1.80 - Turbo mode speeded up even more (15/7/96)
  88. ' v1.81 - Default configuration altered (15/7/96)
  89. ' v1.82 - Minor bugs fixed (15/7/96) 
  90. ' v1.83 - Bitmap levels now always use their correct colours (15/7/96) 
  91. ' v1.84 - Standardised the icons on the bitmap level configuration screen (15/7/96)  
  92. ' v1.85 - Prices adjusted and lightning bug fixed (15/7/96)
  93. ' v1.86 - Arrow above player's head added (15/7/96)
  94. ' v1.87 - New weapon: Random (16/7/96) 
  95. ' v1.88 - Bug in laser weapon corrected (16/7/96)
  96. ' v1.89 - New level type added: Alien (17/7/96)  
  97. ' v1.90 - New weapon: Power driver (17/7/96) 
  98. ' v1.91 - New weapon: Mega tunneller (17/7/96) 
  99. ' v1.92 - 16 new comments added (17/7/96)
  100. ' v1.93 - Appearance of pile driver improved (17/7/96) 
  101. ' v1.94 - Appearance of pile driver changed again (17/7/96)
  102. ' v1.95 - Minor improvements (17/7/96) 
  103. ' v1.96 - Credits list updated, now includes over 30 people! (21/7/96) 
  104. ' v1.97 - New weapons: Splitter, mega splitter (21/7/96) 
  105. ' v1.98 - Minor bugs fixed (21/7/96) 
  106. ' v1.99 - More minor improvements (21/7/96)
  107. ' v2.00 - 4 new weapons: Flood, napalm, large flood, large napalm (23/7/96)
  108. ' v2.01 - Minor bugs corrected (23/7/96) 
  109. ' v2.02 - Bug in splitter corrected (24/7/96)
  110. ' v2.03 - Minor bugs fixed and some improvements (25/7/96) 
  111. ' v2.04 - Time of previous level was messed up by floods and napalms. Now fixed. (27/7/96) 
  112. ' v2.05 - 2 new weapons: Bouncer and mega bouncer (27/7/96)
  113. ' v2.06 - New weapon: Electrify ground (27/7/96) 
  114. ' v2.07 - Bugs fixed (28/7/96) 
  115. ' v2.08 - Bitmap level play order editor speeded up (15/8/96)
  116. ' v2.09 - Randomize option added (15/8/96) 
  117. ' v2.10 - Order that weapons are listed in changed (15/8/96) 
  118. ' v2.11 - Bugs fixed (15/8/96) 
  119. ' v2.12 - New Apex Designs logo screen (24/9/96) 
  120. ' v2.13 - Finally got round to updating instructions (24/9/96) 
  121. ' v2.14 - Bugs fixed (24/9/96) 
  122. ' v2.15 - Minor improvements (25/9/96) 
  123. ' v2.16 - More minor improvements (26/9/96)
  124. ' v2.17 - More bugs fixed (7/10/96)  
  125. ' v2.18 - Improved appearance of desert (10/10/96) 
  126. ' v2.19 - Improved level preview routine to use 8 colours (11/10/96) 
  127. ' v2.20 - External talk files added (16/10/96) 
  128. ' v2.21 - Save configuration added (16/10/96)
  129. ' v2.22 - Bugs fixed (17/10/96)
  130. ' v2.23 - Some keyboard equivalents added (22/12/96) 
  131. ' v2.24 - Added six new tunes (23/12/96)   
  132. ' v2.25 - Added 'shuffle' option to randomly play each of the tunes (23/12/96) 
  133. ' v2.26 - Bugs fixed and instructions updated (23/12/96) 
  134. ' v2.27 - Changed a tune and made shuffle not repeat tracks until absolutely necessary (23/12/96)  
  135. ' v2.28 - More bugs fixed (23/12/96) 
  136. ' v2.29 - Changed two tunes (25/12/96) 
  137. ' v2.30 - Added low memory checking (29/12/96) 
  138. ' v2.31 - Added configurable computer player weapon selection method (29/12/96)
  139. ' v2.32 - Each terrain type is individually toggleable (29/12/96)
  140. ' v2.33 - Lots of little bugs fixed (29/12/96) 
  141. ' v2.34 - More minor tweaks (29/12/96) 
  142. ' v2.35 - More bugs fixed (31/12/96) 
  143. ' v2.36 - Instructions vastly improved (31/12/96)
  144. ' v2.37 - Instructions improved again (1/1/97) 
  145. ' v2.38 - Loads more statistics added (2/1/97) 
  146. ' v2.39 - A few minor tweaks (5/1/97)
  147. ' v2.40 - Bug in turbo mode fixed (6/1/97) 
  148. ' v2.41 - Shaded backdrop in 'bitmap' mode added (8/1/97)
  149. ' v2.42 - Now copes with bitmap levels being added or removed (9/1/97) 
  150. ' v2.43 - More keyboard equivalents (9/1/97) 
  151. ' v2.44 - Bitmap level background shading improved (10/1/97)   
  152. ' v2.45 - Surrendering bug fixed (13/1/97) 
  153. ' v2.46 - Bitmap mode map bug and liquid weapons bug fixed (15/1/97) 
  154. ' v2.47 - FIRST AMINET RELEASE (16/1/97) 
  155. ' v2.48 - Logo updated (21/1/97) 
  156. ' v2.49 - NTSC support added (21/1/97) 
  157. ' v2.50 - Free memory display added (21/1/97)
  158. ' v2.51 - Added more 'quips' (22/1/97) 
  159. ' v2.52 - Levels updated (22/1/97) 
  160. ' v2.53 - Training and angle crosshairs now shown on map (23/1/97) 
  161. ' v2.54 - You are now able to 'pre-buy' defensive items (23/1/97)
  162. ' v2.55 - Instructions updated (23/1/97) 
  163. ' v2.56 - Bug in liquid weapons fixed (23/1/97)
  164. ' v2.57 - Randomize option no longer re-uses levels unless it has to (24/1/97) 
  165. ' v2.58 - Tweaked instructions and options screen (24/1/97)
  166. ' v2.59 - Added auto-randomize option (24/1/97)
  167. ' v2.60 - SECOND AMINET RELEASE (24/1/97)
  168. ' v2.61 - Made fully HD-only. Almost 2 years since the last update! (14/12/98) 
  169. ' v2.62 - Added more 'quips' (14/12/98)
  170. ' v2.63 - Updated Apex Designs logo (15/12/98) 
  171. ' v2.64 - In-game interface radically redesigned (16/12/98)  
  172. ' v2.65 - Direct mouse control of view added (16/12/98)
  173. ' v2.66 - Speeded up in-game interface scrolling (17/12/98)
  174. ' v2.67 - Added in-game help (17/12/98)  
  175. ' v2.68 - Totally redesigned the way you select weapons and buy defence items (17/12/98)   
  176. ' v2.69 - Added a nifty realtime fire effect to the intro (20/12/98) 
  177. ' v2.70 - Added in-game confirmation requesters (22/12/98) 
  178. ' v2.71 - Reduced the chip RAM requirement by 450K (22/12/98)  
  179. ' v2.72 - Bugs fixed (22/12/98)
  180. ' v2.73 - Instructions updated (23/12/98)
  181. ' v2.74 - Made title screen more efficient (23/12/98)
  182. ' v2.75 - Added buttons to scroll around tank (24/12/98) 
  183. ' v2.76 - Decrunching picture changed (27/12/98) 
  184. ' v2.77 - You can now add and remove MODs from the 'Music' directory! (27/12/98) 
  185. ' v2.78 - Updated instructions and fixed bugs (27/12/98) 
  186. ' v2.79 - A few more minor bugs fixed (23/1/99)
  187. ' v2.80 - THIRD AMINET RELEASE - almost exactly 2 years since the previous release! (23/1/99)  
  188.  
  189. ' To do: - Demo mode 
  190. '        - Adaptive CPU IQ 
  191. '        - Load/save game  
  192. '        - Level generation progress meter 
  193. '        - New deaths
  194. '        - Add "Destruction rating"
  195. '        - New weapons: Dirt inverter  
  196. '        - Longer intro, but skippable 
  197. '        - Money gained so far (along top) 
  198. '        - Information about the other players (health, shield, money) - along top, turn on and off
  199. '        - Simultaneous mode 
  200. '        - Multiple Sound FX files 
  201. '        - Make random level generator use objects 
  202. '        - Improve players' random starting point positioning  
  203. '        - Improve support for loading Worms levels (make screen 960*350)  
  204. '        - Escape whilst shoot 
  205. '        - No dirt-based weapons should be allowed when dirt-drop is off 
  206. '        - Add keyboard equivalents to the title screen
  207. '        - Do not use external error message handler 
  208. '        - Teleporters should cut through ceiling
  209. '        - Add a little animation when a player surrenders 
  210. '        - New level type: Jungle
  211. '        - More shield types: Bounce, Teleport and Reverse 
  212. '        - Improve tank's appearance 
  213. '        - Implement 'Charr' weapon system 
  214. '        - Add icons for small angle and power adjustments 
  215. '        - Make tanks tougher
  216. '        - Make shields worse
  217. '        - Each CPU player should have individually configured IQ
  218. '        - Make tanks angle level with the ground
  219. '        - Make tanks mobile 
  220. '        - 'About' screen: - Graphs of weapon use
  221. '                          - Add stats on defence items bought 
  222.  
  223. ' Known/suspected bugs: - Tanks rest against edge of screen? 
  224. '                       - Explosions bugger up in bitmap mode? 
  225.  
  226.  
  227. Set Buffer 100
  228. Set Stack 1000
  229. Trap Screen Close 0
  230. Hide On 
  231. Degree 
  232.  
  233. Global _VER$
  234. _VER$="v2.80"
  235.  
  236. _CHIP=1000000-Chip Free
  237. _FAST=500000-Fast Free+Max(1,-_CHIP)
  238. If _CHIP>0 or _FAST>0
  239.    _OUTOFMEMORY[_CHIP,_FAST]
  240. End If 
  241.  
  242. If Prg State<>1
  243.    Amos To Front 
  244.    Amos Lock 
  245.    Break Off 
  246. Else 
  247.    Dir$="idh1:my stuff/frontalassault/"
  248. End If 
  249.  
  250. ' Establish location of files
  251. Global _MUSICDISK$,_LEVELSDISK$,_TALKDISK$
  252. _MUSICDISK$=Dir$+"Music/"
  253. _LEVELSDISK$=Dir$+"Levels/"
  254. _TALKDISK$=Dir$+"Talk/"
  255.  
  256. Global _NTSC,_PALADD
  257. If Ntsc=0
  258.    _NTSC=0
  259.    _PALADD=56
  260. Else 
  261.    _NTSC=1
  262.    _PALADD=0
  263. End If 
  264.  
  265. ' Setup variables
  266. Dim _PLX(6),_PLY(6),_PLCASH(6),_PLANGLE(6),_PLPOWER(6),_PLHEALTH(6),_PLSHIELD(6),_WEAPUSED(99),_WEAP$(99),_WEAPCOST(99),_PLWEAP(6),_PLMAP(6),_PLOFX(6),_PLOFY(6),_PLNAME$(6),_DEFENCE$(99),_DEFENCECOST(99),_PLDEFENCE(6)
  267. Dim _PLNUMPARACHUTES(6),_PLSHIELDTYPE(6),_PLTYPE(6),_PLHIT(6),_PLFIRED(6),_PLKILLS(6),_PLDEATHS(6),_WEAPCODE(99),_PLAYED(99),_LINES$(250),_OLDX(1),_OLDY(1),_OLDC(1),_PLSHOPPOS(6)
  268. Global _PLX(),_PLY(),_PLCASH(),_PLANGLE(),_PLPOWER(),_PLHEALTH(),_PLSHIELD(),_HEIGHT,_OFX,_OFY,_WEAP$(),_WEAPCOST(),_PLWEAP(),_NUMWEAP,_PLMAP(),_PLOFX(),_PLOFY(),_PLNAME$(),_DEFENCE$(),_DEFENCECOST(),_OLDX(),_OLDY(),_OLDC()
  269. Global _PLDEFENCE(),_PLNUMPARACHUTES(),_PLSHIELDTYPE(),_FIRPL,_PLTYPE(),_PLHIT(),_PLFIRED(),_HIT,_PLKILLS(),_PLDEATHS(),_WEAPCODE(),_GAP,_GAPPT,_INGAME,_PLAYED(),_PTUNE,_LINES$(),_NUMLINES,_OFLINES,_WEAPUSED(),_PREBUY,_SHOPPING
  270. For Z=0 To 99
  271.    _PLAYED(Z)=1
  272. Next 
  273. _PTUNE=-1
  274. _INGAME=0
  275. Dim _BX(9),_BY(9),_BXS(9),_BYS(9),_BT(9),_EDGE$(3),SPY(959),_LEVELTYPEON(6),_TUNE$(99)
  276. Dim _EX(9),_EY(9),_ET(9),_ORDER(13),_ORDER2(6),_PLALIVE(6),_LEVEL$(999),_LEVELDISK(999),_ROUND(99)
  277. Global _EX(),_EY(),_ET(),_EDGE$(),_WINNER,_PREVY1,_PREVY2,_PLALIVE(),_NUMLEVELS,_CHANGED2,_SPECIALQUIT,_FORCEDROP,_TANKS_DESTROYED,_SHOTS_FIRED,_ROUNDS_PLAYED,_TOTAL_PLAYTIME,_TIMES_LOADED,_PLSHOPPOS(),_TUNE$()
  278. Global _TYPE,_GRAVITY,_EDGETYPE,_WIND,_ROUND,_NUMDEFENCE,_NUMROUNDS,_CH,_AUDIO,_TMODE,_TERRAIN,_TIME,_STARTCASH,_INTEREST,_ORDER(),_ORDER2(),_LEVEL$(),_ROUND(),_LEVELDISK(),_CPUWEAP,_LEVELTYPEON(),_PRN,_PRHELP
  279. Global _BX(),_BY(),_BXS(),_BYS(),_BT(),_GENEROSITY,_HITX,_HITY,_IQ,_CURRPAGE,_WMODE,_TURBO,_SKIPVBL,_TRAINING,_FREESCREEN,_BITMAPLEVEL,_CURRX,SPY(),_TURBOTEMP,_DROPY,_DROPYS,_DROPX,_DROPAY,_AUTORANDOMIZE,_NUMTUNES
  280. _PRN=-1
  281. _PRHELP=-1
  282. _SHOPPING=0
  283. _FORCEDROP=0
  284. _CH=0
  285. _CURRPAGE=0
  286. _LOADEDCONFIG=0
  287. _SPECIALQUIT=0
  288.  
  289. ' Initialise chunky screen (used for fire effect during intro) 
  290. Dim _CHUNKY_STORE(17)
  291. Global _CHUNKY_SB,_CHUNKY_STORE()
  292.  
  293. ' Read tunes 
  294. D$= Extension_18_02DE(_MUSICDISK$)
  295. _NUMTUNES=-1
  296. Repeat 
  297.    D$= Extension_18_02EE 
  298.    If D$<>""
  299.       Inc _NUMTUNES
  300.       _TUNE$(_NUMTUNES)=Upper$(D$)
  301.       _PLAYED(_NUMTUNES)=0
  302.    End If 
  303. Until D$=""
  304. If _NUMTUNES=-1
  305.    N= Extension_18_09E8("Error: There must be at least one tune in","the 'Music' directory to load Frontal Assault.","Please add a tune to this directory and try again.","Quit","Quit")
  306.    End 
  307. End If 
  308.  
  309. ' Do intro 
  310. If Prg State<>1
  311.    _DOAPEX
  312.    _DOFALOGO
  313.    Save "RAM:FASamples.abk",5
  314.    Erase 5
  315. End If 
  316.  
  317. Global NNN
  318. Unpack 17 To 5
  319. Screen Hide 5
  320. Screen 5
  321. Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  322. NNN=0
  323. For Y=257 To 263 Step 6
  324.    For X=0 To 232 Step 4
  325.       _GTBOB[X,Y,X+4,Y+6]
  326.    Next 
  327. Next 
  328. Bank Swap 1,2
  329. NNN=0
  330. Screen Copy 5,0,137,320,152 To 5,0,256
  331. Screen Display 5,128,42,320,200+_PALADD
  332. Screen Offset 5,0,(56-_PALADD)/2
  333. Screen Show 5
  334. Unpack 17 To 1
  335. Screen Hide 1
  336. If Prg State<>1
  337.    Erase 17
  338. End If 
  339. Screen 5
  340. Fade 1 To 1
  341. Wait 15
  342. Shift Up 1,1,29,1
  343. Screen Close 1
  344.  
  345. ' Load and play tune 
  346. _DOMESSAGE["Audio","Initialising jukebox"]
  347. _GETTUNE
  348. Track Play 3
  349. Led Off 
  350.  
  351. _DOMESSAGE["General","Reading game configuration"]
  352. D$= Extension_18_02DE(_LEVELSDISK$)
  353. _NUMLEVELS=0
  354. Repeat 
  355.    D$= Extension_18_02EE 
  356.    If D$<>""
  357.       If Upper$(Right$(D$,4))=".MAP"
  358.          Inc _NUMLEVELS
  359.          _LEVEL$(_NUMLEVELS)=Upper$(D$)-".MAP"
  360.       End If 
  361.    End If 
  362. Until D$=""
  363. If _NUMLEVELS=-1
  364.    N= Extension_18_09E8("Error: There must be at least one level in","the 'Levels' directory to load Frontal Assault.","Please add a level to this directory and try again.","Quit","Quit")
  365.    End 
  366. End If 
  367. CN=1
  368. For Z=1 To 99
  369.    _ROUND(Z)=CN
  370.    Add CN,1,1 To _NUMLEVELS
  371. Next 
  372.  
  373. ' Setup configuration  
  374. _NUMROUNDS=15
  375. _IQ=100
  376. _TYPE=1
  377. _GRAVITY=1000
  378. _STARTCASH=250
  379. _AUDIO=0
  380. _INTEREST=105
  381. _TMODE=0
  382. _GENEROSITY=2
  383. _WMODE=1
  384. _TURBO=0
  385. _TRAINING=0
  386. _BITMAPLEVEL=0
  387. _CPUWEAP=0
  388. _TANKS_DESTROYED=0
  389. _SHOTS_FIRED=0
  390. _ROUNDS_PLAYED=0
  391. _TOTAL_PLAYTIME=0
  392. _TIMES_LOADED=0
  393. _AUTORANDOMIZE=1
  394. For Z=1 To 6
  395.    _LEVELTYPEON(Z)=1
  396. Next 
  397. Restore _PLAYERDAT
  398. For Z=0 To 6
  399.    Read _PLNAME$(Z)
  400.    Read _PLTYPE(Z)
  401. Next 
  402. For Z=0 To 99
  403.    _WEAPUSED(Z)=0
  404. Next 
  405. If Exist("S:FrontalAssault.Dat")
  406.    ' Load it  
  407.    Open In 1,"S:FrontalAssault.Dat"
  408.    Input #1,_TEMP
  409.    If _TEMP=-1
  410.       Input #1,_AUTORANDOMIZE
  411.       Input #1,_IQ
  412.    Else 
  413.       _IQ=_TEMP
  414.    End If 
  415.    Input #1,_TYPE
  416.    Input #1,_GRAVITY
  417.    Input #1,_STARTCASH
  418.    Input #1,_AUDIO
  419.    Input #1,_INTEREST
  420.    Input #1,_TMODE
  421.    Input #1,_GENEROSITY
  422.    Input #1,_WMODE
  423.    Input #1,_TURBO
  424.    Input #1,_TRAINING
  425.    Input #1,_BITMAPLEVEL
  426.    Input #1,_CPUWEAP
  427.    Input #1,_TANKS_DESTROYED
  428.    Input #1,_SHOTS_FIRED
  429.    Input #1,_ROUNDS_PLAYED
  430.    Input #1,_TOTAL_PLAYTIME
  431.    Input #1,_TIMES_LOADED
  432.    For Z=0 To 99
  433.       Input #1,_WEAPUSED(Z)
  434.    Next 
  435.    For Z=1 To 6
  436.       Input #1,_LEVELTYPEON(Z)
  437.    Next 
  438.    For Z=0 To 6
  439.       Input #1,_PLNAME$(Z)
  440.       Input #1,_PLTYPE(Z)
  441.    Next 
  442.    Input #1,_NUMROUNDS
  443.    For Z=1 To _NUMROUNDS
  444.       Input #1,_ROUNDNAME$
  445.       _ROUNDNAME$=Upper$(_ROUNDNAME$)
  446.       _FOUND=0
  447.       For TMP=1 To _NUMLEVELS
  448.          If Upper$(_LEVEL$(TMP))=_ROUNDNAME$
  449.             _FOUND=TMP
  450.             TMP=_NUMLEVELS+1
  451.          End If 
  452.       Next 
  453.       If _FOUND=0
  454.          _ROUND(Z)=1
  455.       Else 
  456.          _ROUND(Z)=_FOUND
  457.       End If 
  458.    Next 
  459.    _LOADEDCONFIG=1
  460.    Close 1
  461. End If 
  462. Inc _TIMES_LOADED
  463.  
  464. ' Load talk files
  465. Dim _SHOOTMESSAGE$(999),_DEATHMESSAGE$(999)
  466. Global _NUMSHOOTMESSAGE,_SHOOTMESSAGE$(),_NUMDEATHMESSAGE,_DEATHMESSAGE$()
  467. Set Input 10,-1
  468. Open In 1,_TALKDISK$+"Shoot.TXT"
  469. _NUMSHOOTMESSAGE=0
  470. Repeat 
  471.    Line Input #1,N$
  472.    _SHOOTMESSAGE$(_NUMSHOOTMESSAGE)=N$
  473.    Inc _NUMSHOOTMESSAGE
  474. Until Eof(1)
  475. Close 1
  476. Open In 1,_TALKDISK$+"Die.TXT"
  477. _NUMDEATHMESSAGE=0
  478. Repeat 
  479.    Line Input #1,_DEATHMESSAGE$(_NUMDEATHMESSAGE)
  480.    Inc _NUMDEATHMESSAGE
  481. Until Eof(1)
  482. Close 1
  483.  
  484. _DOMESSAGE["Graphics","Rendering tank images"]
  485. Erase 1
  486. Unpack 11 To 0
  487. If Prg State<>1
  488.    Erase 11
  489. End If 
  490. Screen Hide 0
  491. Screen Open 1,320,256,4,Lowres
  492. Screen Hide 1
  493. Flash Off 
  494. Curs Off 
  495. Cls 0
  496. Dim _BOBNUM(180,4,1)
  497. Global _BOBNUM()
  498. For PL=0 To 1
  499.    For T=0 To 4
  500.       CX=(T*15)+(PL*75)
  501.       For D=-180 To 0 Step 6
  502.          Ink 0,0,0
  503.          Bar 0,0 To 16,16
  504.          Screen Copy 0,CX,0,CX+15,17 To 1,0,0
  505.          Ink 3-PL,0,0
  506.          ADX=Cos(D)*8
  507.          ADY=Sin(D)*8
  508.          Draw 7,8 To 7+ADX,8+ADY
  509.          _GTBOB[0,0,15,17]
  510.          _BOBNUM(D+180,T,PL)=NNN
  511.          If D<0
  512.             For A=1 To 5
  513.                _BOBNUM(A+D+180,T,PL)=NNN
  514.             Next 
  515.          End If 
  516.       Next 
  517.    Next 
  518. Next 
  519. Screen Close 1
  520. _DOMESSAGE["Graphics","Grabbing images for the status bar"]
  521. Unpack 10 To 0
  522. Screen Hide 0
  523. For Y=186 To 204 Step 6
  524.    If Y>192
  525.       For X=0 To 232 Step 4
  526.          _GTBOB[X,Y,X+1,Y+1]
  527.       Next 
  528.    Else 
  529.       For X=0 To 232 Step 4
  530.          _GTBOB[X,Y,X+4,Y+6]
  531.       Next 
  532.    End If 
  533. Next 
  534. _GTBOB[192,150,202,160]
  535. _GTBOB[203,150,211,158]
  536. _GTBOB[214,150,223,158]
  537. _DOMESSAGE["Graphics","Rendering nukes"]
  538. Unpack 15 To 0
  539. If Prg State<>1
  540.    Erase 15
  541. End If 
  542. Screen Hide 0
  543. PREV=100
  544. Ink 0,0,0
  545. For SIZ=70 To 30 Step -20
  546.    For Z=PREV To SIZ Step -1
  547.       Circle 70,70,Z
  548.       Circle 70,71,Z
  549.    Next 
  550.    PREV=SIZ
  551.    _GTBOB[0,0,141,141]
  552. Next 
  553. _DOMESSAGE["Graphics","Grabbing images for the information screen"]
  554. Unpack 16 To 0
  555. Screen Hide 0
  556. For Y=129 To 179 Step 6
  557.    For X=3 To 231 Step 4
  558.       _GTBOB[X,Y,X+4,Y+6]
  559.    Next 
  560. Next 
  561. _GTBOB[0,184,143,195]
  562. _GTBOB[0,196,79,207]
  563. _GTBOB[0,208,101,219]
  564. _DOMESSAGE["Graphics","Grabbing images for the title screen"]
  565. Unpack 14 To 0
  566. Screen Hide 0
  567. For X=0 To 232 Step 4
  568.    _GTBOB[X,202,X+3,207]
  569. Next 
  570. For X=0 To 232 Step 4
  571.    _GTBOB[X,228,X+3,233]
  572. Next 
  573. _GTBOB[0,191,179,201]
  574. _GTBOB[180,192,233,199]
  575. _GTBOB[0,208,17,227]
  576. _GTBOB[19,208,34,227]
  577. _GTBOB[35,208,53,227]
  578. _GTBOB[65,208,199,224]
  579. _GTBOB[201,208,298,225]
  580. _GTBOB[1,234,163,251]
  581. _GTBOB[164,234,237,251]
  582. _GTBOB[54,208,63,217]
  583. _GTBOB[54,218,63,227]
  584. _DOMESSAGE["Graphics","Initializing level texture renderer"]
  585. Unpack 21 To 0
  586. Screen Hide 0
  587. _DOMESSAGE["Graphics","Rendering level texture"]
  588. For X=0 To 159
  589.    For Y=0 To 127
  590.        Extension_12_0394 X,Y,Rnd(3)+1
  591.    Next 
  592. Next 
  593. For X=0 To 800 Step 160
  594.    For Y=0 To 384 Step 128
  595.       Screen Copy 0,0,0,320,256 To 0,X,Y
  596.    Next 
  597. Next 
  598. _DOMESSAGE["Graphics","Storing level texture"]
  599. Spack 0 To 22
  600. Screen Close 0
  601. _DOMESSAGE["Graphics","Rendering other explosions"]
  602. Screen Open 0,320,256,16,Lowres
  603. Screen Hide 0
  604. Curs Off 
  605. Cls 0
  606. Ink 8,0,0
  607. Draw 4,0 To 4,2
  608. Draw 4,6 To 4,8
  609. Draw 0,4 To 2,4
  610. Draw 6,4 To 8,4
  611. _GTBOB[0,0,9,9]
  612. _COL=9
  613. For SIZ=14 To 29 Step 15
  614.    Cls 0
  615.    For Z=1 To SIZ
  616.       Ink _COL,0,0
  617.       Circle 160,128,Z
  618.       Circle 161,128,Z
  619.       Add _COL,1,9 To 15
  620.    Next 
  621.    _GTBOB[109,77,211,179]
  622. Next 
  623. For SIZ=29 To 49 Step 20
  624.    Cls 0
  625.    Ink 9,0,0
  626.    For Z=1 To SIZ
  627.       Circle 160,128,Z
  628.       Circle 161,128,Z
  629.    Next 
  630.    _GTBOB[109,77,211,179]
  631. Next 
  632. Cls 0
  633. For _COL=0 To 6
  634.    Ink _COL+9,0,0
  635.    Draw _COL/2,_COL To 6-(_COL/2),_COL
  636. Next 
  637. _GTBOB[0,0,7,7]
  638. Screen Close 0
  639. _DOMESSAGE["Graphics","Grabbing fonts"]
  640. Unpack 9 To 0
  641. Screen Hide 0
  642. If Prg State<>1
  643.    Erase 9
  644. End If 
  645. For Y=0 To 36 Step 6
  646.    For X=0 To 232 Step 4
  647.       _GTBOB[X,Y,X+4,Y+6]
  648.    Next 
  649. Next 
  650. Screen Close 0
  651.  
  652. _DROPY=-1
  653. _SKIPVBL=0
  654. _TURBOTEMP=_TYPE
  655. _FREESCREEN=3
  656.  
  657. Restore _WEAPDAT
  658. _NUMWEAP=0
  659. Repeat 
  660.    Read N$
  661.    If N$<>"END"
  662.       _WEAP$(_NUMWEAP)=N$
  663.       Read _WEAPCOST(_NUMWEAP)
  664.       Read _WEAPCODE(_NUMWEAP)
  665.       Inc _NUMWEAP
  666.    End If 
  667. Until N$="END"
  668. _DOMESSAGE["Information",Str$(_NUMWEAP)+" weapons and"+Str$(_NUMDEATHMESSAGE+_NUMSHOOTMESSAGE)+" comments found"]
  669. Restore _DEFENCEDAT
  670. _NUMDEFENCE=0
  671. Repeat 
  672.    Read N$
  673.    If N$<>"END"
  674.       _DEFENCE$(_NUMDEFENCE)=N$
  675.       Read _DEFENCECOST(_NUMDEFENCE)
  676.       Inc _NUMDEFENCE
  677.    End If 
  678. Until N$="END"
  679. Restore _EDGEDAT
  680. For Z=0 To 3
  681.    Read _EDGE$(Z)
  682. Next 
  683. Led Off 
  684. Randomize Timer
  685.  
  686. Screen 5
  687. Shift Off 
  688. Fade 1
  689. Wait 15
  690. Screen Close 5
  691. Erase 2
  692. Sprite Update Off 
  693.  
  694. _QUIT=0
  695. Do 
  696.    Unpack 12 To 0
  697.    Screen Hide 0
  698.    Screen Display 0,128,35,320,48
  699.    For Z=0 To 31
  700.       Colour Z,$0
  701.    Next 
  702.    Screen Show 0
  703.    View 
  704.    Wait Vbl 
  705.    Fade 1,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  706.    Timer=0
  707.    Unpack 12 To 1
  708.    Screen Hide 1
  709.    Screen 0
  710.    Wait Max(1,15-Timer)
  711.    Fade 2 To 1
  712.    Timer=0
  713.    
  714.    If _NTSC=0
  715.       Unpack 13 To 1
  716.       Screen Hide 1
  717.       Screen Display 1,128,85,320,43
  718.       For Z=0 To 31
  719.          Colour Z,$0
  720.       Next 
  721.       Unpack 13 To 2
  722.       Screen Hide 2
  723.       Screen Show 1
  724.       Screen 1
  725.       Wait Max(1,30-Timer)
  726.       Fade 2 To 2
  727.       Timer=0
  728.    End If 
  729.    
  730.    Unpack 14 To 4
  731.    Screen Hide 4
  732.    _FREESCREEN=5
  733.    Screen Open 2,320,181,32,Lowres
  734.    Screen Hide 2
  735.    Flash Off 
  736.    Curs Off 
  737.    Cls 0
  738.    Screen Display 2,129,118-(33*_NTSC),320,177
  739.    Screen Offset 2,0,4
  740.    For Z=0 To 31
  741.       Colour Z,$0
  742.    Next 
  743.    Screen Show 2
  744.    Double Buffer 
  745.    Autoback 0
  746.    Bob Update Off 
  747.    Wait Max(1,30-Timer)
  748.    Fade 2 To 4
  749.    _DORAINBOW
  750.    View 
  751.    Wait Vbl 
  752.    
  753.    Repeat 
  754.       _DRAWMAINSCREEN
  755.       _DOSTUFF[0]
  756.       M=Mouse Zone
  757.       If M=1
  758.          _DOINSTRUCTIONS
  759.       End If 
  760.       If M=2
  761.          _DOOPTIONS
  762.       End If 
  763.       If M=3
  764.          _DOSETUP
  765.       End If 
  766.       If M=5
  767.          _DOQUIT
  768.          If Param=1
  769.             _QUIT=1
  770.             M=4
  771.          End If 
  772.       End If 
  773.    Until M=4
  774.    
  775.    Sprite Off 1
  776.    Sprite Update 
  777.    Rainbow Del 0
  778.    Z=0
  779.    ZS=0
  780.    Repeat 
  781.       Add Z,ZS
  782.       Inc ZS
  783.       Screen Display 0,128,42+Z,320,48
  784.       If _NTSC=0
  785.          Screen Display 1,128,92+(Z*2),320,36
  786.       End If 
  787.       Screen Display 2,129,128+(Z*3)-(_NTSC*43),320,164
  788.       View 
  789.       Wait Vbl 
  790.    Until Z>255
  791.    Screen Close 0
  792.    Screen Close 1
  793.    Screen Close 2
  794.    Screen Close 4
  795.    _FREESCREEN=3
  796.    
  797.    If _QUIT=1
  798.       ' Save configuration 
  799.       _TYPE=_TURBOTEMP
  800.       If Extension_18_0248("S:")=2
  801.          Open Out 1,"S:FrontalAssault.Dat"
  802.          Print #1,-1
  803.          Print #1,_AUTORANDOMIZE
  804.          Print #1,_IQ
  805.          Print #1,_TYPE
  806.          Print #1,_GRAVITY
  807.          Print #1,_STARTCASH
  808.          Print #1,_AUDIO
  809.          Print #1,_INTEREST
  810.          Print #1,_TMODE
  811.          Print #1,_GENEROSITY
  812.          Print #1,_WMODE
  813.          Print #1,_TURBO
  814.          Print #1,_TRAINING
  815.          Print #1,_BITMAPLEVEL
  816.          Print #1,_CPUWEAP
  817.          Print #1,_TANKS_DESTROYED
  818.          Print #1,_SHOTS_FIRED
  819.          Print #1,_ROUNDS_PLAYED
  820.          Print #1,_TOTAL_PLAYTIME
  821.          Print #1,_TIMES_LOADED
  822.          For Z=0 To 99
  823.             Print #1,_WEAPUSED(Z)
  824.          Next 
  825.          For Z=1 To 6
  826.             Print #1,_LEVELTYPEON(Z)
  827.          Next 
  828.          For Z=0 To 6
  829.             Print #1,_PLNAME$(Z)
  830.             Print #1,_PLTYPE(Z)
  831.          Next 
  832.          Print #1,_NUMROUNDS
  833.          For Z=1 To _NUMROUNDS
  834.             Print #1,_LEVEL$(_ROUND(Z))
  835.          Next 
  836.          Close 1
  837.       End If 
  838.       If Exist("RAM:FASamples.abk")
  839.          Kill "RAM:FASamples.abk"
  840.       End If 
  841.       If Prg State<>1
  842.          Amos Unlock 
  843.          Amos To Back 
  844.       Else 
  845.          Erase 1
  846.          Erase 3
  847.          Erase 22
  848.       End If 
  849.       End 
  850.    End If 
  851.    
  852.    For Z=0 To 6
  853.       _PLCASH(Z)=_STARTCASH
  854.       _PLSHOPPOS(Z)=0
  855.       _PLWEAP(Z)=0
  856.       _PLMAP(Z)=0
  857.       _PLDEFENCE(Z)=0
  858.       _PLNUMPARACHUTES(Z)=0
  859.       _PLHIT(Z)=0
  860.       _PLFIRED(Z)=0
  861.       _PLKILLS(Z)=0
  862.       _PLDEATHS(Z)=0
  863.    Next 
  864.    _WINNER=-2
  865.    _FIRST=1
  866.    
  867.    For _ROUND=1 To _NUMROUNDS
  868.       _MAINGAME[_FIRST]
  869.       _FIRST=0
  870.       If Param=1
  871.          _ROUND=1000
  872.       End If 
  873.    Next 
  874.    
  875.    If Prg State<>1
  876.       Erase 5
  877.    End If 
  878.    
  879.    If Param=0
  880.       _DRAWINFO[2]
  881.       _KILLINFO
  882.    End If 
  883.    
  884.    If _AUTORANDOMIZE=1
  885.       _RANDOMIZELEVELS
  886.    End If 
  887.    
  888. Loop 
  889.  
  890. Procedure _GTBOB[X1,Y1,X2,Y2]
  891.    Inc NNN
  892.    S=Screen
  893.    Get Bob S,NNN,X1,Y1 To X2,Y2
  894. End Proc
  895.  
  896. Procedure _UPDATESCREEN[_AIMX,_AIMY]
  897.    If _HEIGHT<256
  898.       Screen Show 1
  899.       If _TIME<2
  900.          Rainbow 0,0,40,_HEIGHT+3-(_NTSC*56)
  901.       End If 
  902.       If _SHOPPING=0
  903.          Screen Display 1,128,Max(250-(_NTSC*56),43+_HEIGHT-(_NTSC*56)),320,Min(48,255-_HEIGHT)
  904.       Else 
  905.          Screen Display 1,128,Max(200-(_NTSC*56),43+_HEIGHT-(_NTSC*56)),320,Min(98,255-_HEIGHT)
  906.       End If 
  907.    Else 
  908.       If _TIME<2
  909.          Rainbow 0,0,40,258-(_NTSC*56)
  910.       End If 
  911.       Screen Hide 1
  912.    End If 
  913.    Screen 0
  914.    Screen Display 0,128,42,320,_HEIGHT-(_NTSC*56)
  915.    _TFX=Max(0,Min(639,_AIMX-160))
  916.    _TFY=Max(0,Min(511-_HEIGHT+(_NTSC*56),_AIMY-((_HEIGHT-(_NTSC*56))/2)))
  917.    OOX=_OFX
  918.    OOY=_OFY
  919.    If _TFX<>_OFX or _TFY<>_OFY
  920.       _DX=((_TFX-_OFX)/8)
  921.       _DY=((_TFY-_OFY)/8)
  922.       Add _OFX,_DX
  923.       Add _OFY,_DY
  924.       If _TFX>_OFX
  925.          Inc _OFX
  926.       End If 
  927.       If _TFX<_OFX
  928.          Dec _OFX
  929.       End If 
  930.       If _TFY>_OFY
  931.          Inc _OFY
  932.       End If 
  933.       If _TFY<_OFY
  934.          Dec _OFY
  935.       End If 
  936.    End If 
  937.    If _TFX<>_OFX or _TFY<>_OFY
  938.       CHANGED=1
  939.    Else 
  940.       CHANGED=0
  941.    End If 
  942.    For Z=0 To 6
  943.       TX=_PLX(Z)-8-_OFX
  944.       TY=_PLY(Z)-13-_OFY
  945.       If TX>-16 and TX<319 and TY>-16 and TY<_HEIGHT-1-(_NTSC*56) and _PLALIVE(Z)>0
  946.          _PLTYPE=_PLSHIELDTYPE(Z)
  947.          If _PLTYPE<0
  948.             _PLTYPE=4
  949.          End If 
  950.          If 2*Int(Z/2)=Z
  951.             Sprite Z,X Hard(TX),Y Hard(TY),_BOBNUM(_PLANGLE(Z)+90,_PLTYPE,0)
  952.          Else 
  953.             Sprite Z,X Hard(TX),Y Hard(TY),_BOBNUM(_PLANGLE(Z)+90,_PLTYPE,1)
  954.          End If 
  955.       Else 
  956.          Sprite Off Z
  957.       End If 
  958.    Next 
  959.    Screen Offset 0,_OFX,_OFY
  960.    View 
  961.    Sprite Update 
  962.    _CHECKTUNE
  963.    If _DROPY>-200
  964.       Shift Off 
  965.       Palette ,,,,,,,,,$911,$A33,$B55,$C77,$D99,$EBB,$FDD
  966.       Add _DROPY,_DROPYS
  967.       Inc _DROPYS
  968.       _DROPYS=Min(32,_DROPYS)
  969.       If _DROPY>_DROPAY
  970.          _DROPYS=-16
  971.       End If 
  972.       If _DROPY>-200
  973.          Bob 3,_DROPX,_DROPY/4,1212
  974.       Else 
  975.          Bob Off 3
  976.       End If 
  977.       If _DROPYS<-32
  978.          CHANGED=1
  979.       End If 
  980.       If _SKIPVBL<>0
  981.          Bob Update 
  982.       End If 
  983.    End If 
  984.    If _SKIPVBL=0
  985.       Wait Vbl 
  986.       Bob Update 
  987.    End If 
  988. End Proc[CHANGED]
  989.  
  990. Procedure _FALL[X1,Y1,X2,Y2]
  991.    _OTYPE=_TYPE
  992.    If _BITMAPLEVEL=1
  993.       _TYPE=2
  994.    End If 
  995.    If _FORCEDROP=1
  996.       _FORCEDROP=0
  997.       If _OTYPE=2
  998.          _TYPE=1
  999.       Else 
  1000.          _TYPE=_OTYPE
  1001.       End If 
  1002.    End If 
  1003.    Y2=Min(511,Y2)
  1004.    X1=Max(0,X1)
  1005.    X2=Min(959,X2)
  1006.    If X2=>X1
  1007.       _WIDTH=X2-X1
  1008.       Dim _NUM(959)
  1009.       If _TYPE=-1
  1010.          For X=X1 To X2
  1011.             CY=0
  1012.             For Y=Y1 To Y2
  1013.                P= Extension_12_0470(X,Y)
  1014.                If P>0 and P<8
  1015.                   Inc CY
  1016.                End If 
  1017.             Next 
  1018.             _NUM(X)=CY
  1019.          Next 
  1020.          Ink 0,0,0
  1021.          Bar X1,Y1 To X2,Y2
  1022.          Ink 3,0,0
  1023.          For X=X1 To X2
  1024.             If _NUM(X)>0
  1025.                Draw X,Y2-(_NUM(X)-1) To X,Y2
  1026.             End If 
  1027.          Next 
  1028.       End If 
  1029.       If _TYPE=0
  1030.          For X=0 To _WIDTH
  1031.             _NUM(X)=Y2
  1032.          Next 
  1033.          Ink 0,0,0
  1034.          Draw X1,Y1 To X1+_WIDTH,Y1
  1035.          For Y=Y1 To Y2
  1036.             For X=X1 To X2
  1037.                P= Extension_12_0470(X,Y)
  1038.                If P>0 and P<8
  1039.                   Y1=Y-1
  1040.                   Y=9999
  1041.                End If 
  1042.             Next 
  1043.          Next 
  1044.          For Y=Y1 To Y2
  1045.             For X=0 To _WIDTH
  1046.                If _NUM(X)>Y1
  1047.                   P= Extension_12_0470(X1+X,_NUM(X))
  1048.                   While P>0 and P<8 and _NUM(X)>Y1
  1049.                      Dec _NUM(X)
  1050.                      P= Extension_12_0470(X1+X,_NUM(X))
  1051.                   Wend 
  1052.                   If _NUM(X)>Y1
  1053.                      Screen Copy 0,X1+X,Y,X1+X+1,_NUM(X) To 0,X1+X,Y+1
  1054.                   End If 
  1055.                End If 
  1056.             Next 
  1057.          Next 
  1058.       End If 
  1059.       If _TYPE=1
  1060.          
  1061.          Ink 0,0,0
  1062.          For X=X2 To X1 Step -1
  1063.             _NMY=Y2
  1064.             _CHANGED=0
  1065.             For Y=Y2 To Y1 Step -1
  1066.                P= Extension_12_0470(X,Y)
  1067.                If P>0
  1068.                   If _NMY>Y
  1069.                       Extension_12_0394 X,_NMY,P
  1070.                      _CHANGED=1
  1071.                   End If 
  1072.                   Dec _NMY
  1073.                End If 
  1074.             Next 
  1075.             If _CHANGED=1
  1076.                '               If _NMY>Y1 
  1077.                Draw X,Y1 To X,_NMY
  1078.                '               End If 
  1079.             End If 
  1080.          Next 
  1081.          
  1082.          '         For X=0 To _WIDTH
  1083.          '            _NUM(X)=Y2+1
  1084.          '         Next 
  1085.          '         For Y=Y2 To Y1 Step -1 
  1086.          '           For X=0 To _WIDTH
  1087.          '              P=F Point(X1+X,Y) 
  1088.          '               If P>0 and P<8 
  1089.          '                  Dec _NUM(X) 
  1090.          '                  If _NUM(X)>Y
  1091.          '                     F Plot X1+X,Y,0
  1092.          '                     F Plot X1+X,_NUM(X),P
  1093.          '                  End If  
  1094.          '               End If 
  1095.          '            Next  
  1096.          '         Next 
  1097.       End If 
  1098.    End If 
  1099.    _TYPE=_OTYPE
  1100. End Proc
  1101.  
  1102. Procedure _UPDATEPOWER[PL]
  1103.    Screen 1
  1104.    Ink 15,0,0
  1105.    Bar 30,25 To 67,31
  1106.    If _PLPOWER(PL)<>0
  1107.       DX=(_PLPOWER(PL)*37)/999
  1108.       Ink 14,0,0
  1109.       If DX>0
  1110.          Bar 30,25 To 30+DX,31
  1111.       Else 
  1112.          Draw 30,25 To 30,31
  1113.       End If 
  1114.    End If 
  1115.    _NUMTOSTRING[_PLPOWER(PL),3]
  1116.    P$=Param$
  1117.    Ink 15,0,0
  1118.    Bar 69,25 To 81,31
  1119.    _DOTEXT[70,26,P$,0]
  1120. End Proc
  1121.  
  1122. Procedure _UPDATEANGLE[PL]
  1123.    Screen 1
  1124.    _NUMTOSTRING[_PLANGLE(PL),2]
  1125.    If _PLANGLE(PL)=>0
  1126.       P$="+"+Param$
  1127.    Else 
  1128.       P$="-"+Param$
  1129.    End If 
  1130.    Ink 15,0,0
  1131.    Bar 108,25 To 120,31
  1132.    _DOTEXT[109,26,P$,0]
  1133. End Proc
  1134.  
  1135. 'Procedure _UPDATEWEAP[PL] 
  1136. '   Screen 1 
  1137. '   Screen Copy 1,7,173,89,213 To 1,7,4
  1138. '   _NUMTOSTRING[_WEAPCOST(_PLWEAP(PL)),5] 
  1139. '   P$=Param$
  1140. '   If _WEAPCOST(_PLWEAP(PL))>_PLCASH(PL)
  1141. '      _DOTEXT[28,6,P$,2]
  1142. '   Else 
  1143. '      _DOTEXT[28,6,P$,1]
  1144. '   End If 
  1145. '   For N=-2 To 2
  1146. '      TN=_PLWEAP(PL)+N
  1147. '      If TN=>0 and TN<_NUMWEAP
  1148. '         If N=0 
  1149. '            C=2 
  1150. '         Else 
  1151. '            C=0 
  1152. '         End If 
  1153. '         _DOTEXT[10,27+(N*6),_WEAP$(TN),C]
  1154. '      End If  
  1155. '   Next 
  1156. 'End Proc
  1157.  
  1158. 'Procedure _UPDATEDEFENCE[PL]
  1159. '   Screen 1 
  1160. '   Screen Copy 1,91,173,173,213 To 1,91,4 
  1161. '   _NUMTOSTRING[_DEFENCECOST(_PLDEFENCE(PL)),5] 
  1162. '   P$=Param$
  1163. '   If _DEFENCECOST(_PLDEFENCE(PL))>_PLCASH(PL)
  1164. '      _DOTEXT[112,6,P$,2] 
  1165. '   Else 
  1166. '      _DOTEXT[112,6,P$,1] 
  1167. '   End If 
  1168. '   For N=-2 To 2
  1169. '      TN=_PLDEFENCE(PL)+N 
  1170. '      If TN=>0 and TN<_NUMDEFENCE 
  1171. '         If N=0 
  1172. '            C=2 
  1173. '         Else 
  1174. '            C=0 
  1175. '         End If 
  1176. '         If TN=0
  1177. '            _NUMTOSTRING[_PLNUMPARACHUTES(PL),3]
  1178. '            N$=_DEFENCE$(TN)+"   ("+Param$+")"
  1179. '            _DOTEXT[94,27+(N*6),N$,C] 
  1180. '         Else 
  1181. '            _DOTEXT[94,27+(N*6),_DEFENCE$(TN),C]
  1182. '         End If 
  1183. '      End If  
  1184. '   Next 
  1185. 'End Proc
  1186.  
  1187. Procedure _DOTEXT[X,Y,TXT$,C]
  1188.    If Len(TXT$)>0
  1189.       TXT$=Upper$(TXT$)
  1190.       For Z=1 To Len(TXT$)
  1191.          Paste Bob X+((Z-1)*4),Y,217+(C*59)+Asc(Mid$(TXT$,Z,1))+62
  1192.       Next 
  1193.    End If 
  1194. End Proc
  1195.  
  1196. Procedure _NUMTOSTRING[_NUMBER,_LENGTH]
  1197.    S$=Str$(_NUMBER)
  1198.    S$=Right$(S$,Len(S$)-1)
  1199.    While Len(S$)<_LENGTH
  1200.       S$="0"+S$
  1201.    Wend 
  1202. End Proc[S$]
  1203.  
  1204. Procedure _ADDMAP[PL]
  1205.    Screen Open 2,320,72,16,Lowres
  1206.    Screen Hide 2
  1207.    Curs Off 
  1208.    Flash Off 
  1209.    Screen Copy 1,0,198,320,270 To 2,0,0
  1210.    Get Palette 1
  1211.    Palette ,,,,,,,,$0,$F0,$F,$FF0,$F00,$F0F,$FF,$F70
  1212.    If _TYPE>1 or _BITMAPLEVEL=1
  1213.       For X=0 To 119
  1214.          Screen 0
  1215.          VTX=X*8
  1216.          For Y=0 To 63
  1217.             If Extension_12_0470(VTX,Y*8)<>0
  1218.                Screen 2
  1219.                 Extension_12_0394 X+194,4+Y,8
  1220.                Screen 0
  1221.             End If 
  1222.          Next 
  1223.       Next 
  1224.       Screen 2
  1225.    Else 
  1226.       Ink 8,0,0
  1227.       For X=0 To 119
  1228.          Screen 0
  1229.          CY=0
  1230.          VTX=X*8
  1231.          For Y=63 To 0 Step -1
  1232.             If Extension_12_0470(VTX,Y*8)=0
  1233.                CY=63-Y
  1234.                Y=0
  1235.             End If 
  1236.          Next 
  1237.          Screen 2
  1238.          If CY>0
  1239.             Draw X+194,67 To X+194,67-CY
  1240.          End If 
  1241.       Next 
  1242.    End If 
  1243.    _NUMTOSTRING[_ROUND,2]
  1244.    P$="ROUND "+Param$
  1245.    _NUMTOSTRING[_NUMROUNDS,2]
  1246.    P$=P$+" OF "+Param$
  1247.    _DOTEXT[131,5,P$,1]
  1248.    For Z=0 To 6
  1249.       N$=_PLNAME$(Z)
  1250.       If _PLHEALTH(Z)=>0
  1251.          NX=(_PLX(Z)/8)+194
  1252.          NY=(_PLY(Z)/8)+4
  1253.          _DOSTAR[NX,NY,Z]
  1254.       Else 
  1255.          N$=N$+" (MIA)"
  1256.       End If 
  1257.       _DOSTAR[8,(Z*6)+20,Z]
  1258.       _DOTEXT[11,(Z*6)+18,N$,1]
  1259.    Next 
  1260.    C=Colour(9+PL)
  1261.    C$=Right$(Hex$(C,3),3)
  1262.    N$="("+C$+",10)(FFF,10)"
  1263.    Flash 9+PL,N$
  1264.    For _HEIGHT=207 To 135 Step -4
  1265.       If 206-_HEIGHT>1
  1266.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,206-_HEIGHT
  1267.          Screen Show 2
  1268.       End If 
  1269.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  1270.    Next 
  1271.    _HEIGHT=135
  1272. End Proc
  1273.  
  1274. Procedure _DOSTAR[NX,NY,Z]
  1275.     Extension_12_0394 NX,NY,9+Z
  1276.     Extension_12_0394 NX+1,NY,9+Z
  1277.     Extension_12_0394 NX-1,NY,9+Z
  1278.     Extension_12_0394 NX,NY+1,9+Z
  1279.     Extension_12_0394 NX,NY-1,9+Z
  1280. End Proc
  1281.  
  1282. Procedure _REMOVEMAP[PL]
  1283.    For _HEIGHT=135 To 207 Step 4
  1284.       If 206-_HEIGHT>1
  1285.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,206-_HEIGHT
  1286.          Screen Show 2
  1287.       Else 
  1288.          Screen Hide 2
  1289.       End If 
  1290.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  1291.    Next 
  1292.    _HEIGHT=207
  1293.    Flash Off 
  1294.    Screen Close 2
  1295. End Proc
  1296.  
  1297. Procedure _RESETEXPLOSIONS
  1298.    For Z=0 To 9
  1299.       _ET(Z)=0
  1300.    Next 
  1301.    _DOCOLOURS
  1302.    If Rnd(1)=1
  1303.       Shift Up 2,9,15,1
  1304.    Else 
  1305.       Shift Down 2,9,15,1
  1306.    End If 
  1307. End Proc
  1308.  
  1309. Procedure _DOCOLOURS
  1310.    Restore _COLOURDAT
  1311.    R=Rnd(6)
  1312.    For Z=0 To R
  1313.       For _COL=9 To 15
  1314.          Read _C
  1315.          Colour _COL,_C
  1316.       Next 
  1317.    Next 
  1318.    _COLOURDAT:
  1319.    Data $220,$660,$AA0,$FF0,$BB0,$770,$330
  1320.    Data $200,$600,$A00,$F00,$B00,$700,$300
  1321.    Data $202,$606,$A0A,$F0F,$B0B,$707,$303
  1322.    Data $2,$6,$A,$F,$B,$7,$3
  1323.    Data $22,$66,$AA,$FF,$BB,$77,$33
  1324.    Data $20,$60,$A0,$F0,$B0,$70,$30
  1325.    Data $222,$666,$AAA,$FFF,$BBB,$777,$333
  1326. End Proc
  1327.  
  1328. Procedure _ADDEXPLOSION[_NUM,X,Y,TYPE,_SPECIAL]
  1329.    _EX(_NUM)=X
  1330.    _EY(_NUM)=Y
  1331.    _ET(_NUM)=Abs(TYPE)
  1332.    _COL=3
  1333.    Clip 0,0 To 959,511
  1334.    If TYPE<0
  1335.       _PLAYSAMP[3]
  1336.       Paste Bob X-70,Y-70,491-Abs(TYPE/20)+62
  1337.       For Z=0 To 6
  1338.          _WORKOUTHEALTHLOSS[X,Y,_PLX(Z),_PLY(Z),Abs(TYPE)*2]
  1339.          LOSS=Param
  1340.          _LOOSEHEALTH[Z,LOSS]
  1341.       Next 
  1342.    Else 
  1343.       _PLAYSAMP[4]
  1344.       If _SPECIAL=0
  1345.          If _ET(_NUM)=15
  1346.             Paste Bob X-51,Y-51,1208
  1347.          Else 
  1348.             Paste Bob X-51,Y-51,1209
  1349.          End If 
  1350.          For Z=0 To 6
  1351.             _WORKOUTHEALTHLOSS[X,Y,_PLX(Z),_PLY(Z),TYPE]
  1352.             LOSS=Param
  1353.             _LOOSEHEALTH[Z,LOSS]
  1354.          Next 
  1355.       Else 
  1356.          Shift Off 
  1357.          Colour 9,$F50
  1358.          If _ET(_NUM)=30
  1359.             Paste Bob X-51,Y-51,1210
  1360.          Else 
  1361.             Paste Bob X-51,Y-51,1211
  1362.          End If 
  1363.       End If 
  1364.    End If 
  1365. End Proc
  1366.  
  1367. Procedure _ADDDIRT[_NUM,TX,TY]
  1368.    N=0
  1369.    _TOP=Max(1,TY-200)
  1370.    For Y=TY To _TOP Step -1
  1371.       For X=TX-(N/4) To TX+(N/4)
  1372.          If Rnd(2)=2
  1373.              Extension_12_0394 X,Y,Rnd(3)+1
  1374.          End If 
  1375.       Next 
  1376.       Inc N
  1377.    Next 
  1378.    _EX(_NUM)=TX
  1379.    _EY(_NUM)=512-(N/4)
  1380.    _ET(_NUM)=-(N/4)
  1381. End Proc
  1382.  
  1383. Procedure _REMOVEEXPLOSIONS
  1384.    AX=0
  1385.    AY=0
  1386.    N=0
  1387.    _NOUPDATE=0
  1388.    For Z=0 To 9
  1389.       If _ET(Z)<>0
  1390.          Add AX,_EX(Z)
  1391.          Add AY,_EY(Z)
  1392.          Inc N
  1393.          T=_ET(Z)
  1394.          If T<0
  1395.             _NOUPDATE=1
  1396.          Else 
  1397.             If _TYPE<>-1
  1398.                T=Abs(T)
  1399.                For X=_EX(Z)-T To _EX(Z)+T
  1400.                   For Y=_EY(Z)-T To _EY(Z)+T
  1401.                      If Extension_12_0470(X,Y)=>8
  1402.                          Extension_12_0394 X,Y,0
  1403.                      End If 
  1404.                   Next 
  1405.                Next 
  1406.             End If 
  1407.          End If 
  1408.       End If 
  1409.    Next 
  1410.    If N>0
  1411.       If _NOUPDATE=0
  1412.          AX=AX/N
  1413.          AY=AY/N
  1414.          Repeat 
  1415.             _UPDATESCREEN[AX,AY]
  1416.          Until Param=0
  1417.       End If 
  1418.       For Z=0 To 9
  1419.          If _ET(Z)<>0
  1420.             _FALL[_EX(Z)-Abs(_ET(Z)),0,_EX(Z)+Abs(_ET(Z)),_EY(Z)+Abs(_ET(Z))]
  1421.          End If 
  1422.       Next 
  1423.    End If 
  1424.    _SELECTCOLOUR
  1425. End Proc
  1426.  
  1427. Procedure _DROPTANKS
  1428.    _FIRST=1
  1429.    Repeat 
  1430.       AVX=0
  1431.       AVY=0
  1432.       NUMAV=0
  1433.       For Z=0 To 6
  1434.          If _PLALIVE(Z)>0
  1435.             If Extension_12_0470(_PLX(Z),_PLY(Z))=0
  1436.                Inc NUMAV
  1437.                Add AVX,_PLX(Z)
  1438.                Add AVY,_PLY(Z)
  1439.                If _PLSHIELDTYPE(Z)<0
  1440.                   Add _PLX(Z),Rnd(2)-1
  1441.                   Inc _PLY(Z)
  1442.                Else 
  1443.                   Add _PLY(Z),2
  1444.                End If 
  1445.                If _PLNUMPARACHUTES(Z)>0
  1446.                   If _PLALIVE(Z)=2
  1447.                      If _FIRST=1
  1448.                         Dec _PLNUMPARACHUTES(Z)
  1449.                         _PLSHIELDTYPE(Z)=-(_PLSHIELDTYPE(Z)+1)
  1450.                      End If 
  1451.                   End If 
  1452.                Else 
  1453.                   If _PLSHIELDTYPE(Z)=>0
  1454.                      _LOOSEHEALTH[Z,5]
  1455.                   End If 
  1456.                End If 
  1457.             Else 
  1458.                If _PLSHIELDTYPE(Z)<0
  1459.                   _PLSHIELDTYPE(Z)=-(_PLSHIELDTYPE(Z)+1)
  1460.                End If 
  1461.             End If 
  1462.          End If 
  1463.       Next 
  1464.       If NUMAV>0
  1465.          AVX=AVX/NUMAV
  1466.          AVY=AVY/NUMAV
  1467.          _UPDATESCREEN[AVX,AVY]
  1468.       End If 
  1469.       _FIRST=0
  1470.    Until NUMAV=0
  1471. End Proc
  1472.  
  1473. Procedure _UPDATEOTHERS[PL]
  1474.    Screen 1
  1475.    _NUMTOSTRING[_PLCASH(PL),6]
  1476.    P$=Param$
  1477.    Screen Copy 1,107,285+16,139,285+21 To 1,107,16
  1478.    _DOTEXT[108,16,P$,0]
  1479.    Screen Copy 1,63,285+7,139,285+11 To 1,63,7
  1480.    _DOTEXT[64,7,_EDGE$(_EDGETYPE),0]
  1481.    _NUMTOSTRING[Abs(_WIND),2]
  1482.    P$=" "+Param$
  1483.    If _WIND>0
  1484.       P$=">"+Param$
  1485.    End If 
  1486.    If _WIND<0
  1487.       P$="<"+Param$
  1488.    End If 
  1489.    Screen Copy 1,24,285+7,39,285+11 To 1,24,7
  1490.    _DOTEXT[25,7,P$,0]
  1491.    _NUMTOSTRING[_PLHEALTH(PL),3]
  1492.    P$=Param$
  1493.    Screen Copy 1,32,285+16,46,285+20 To 1,32,16
  1494.    _DOTEXT[32,16,P$,0]
  1495.    _NUMTOSTRING[_PLSHIELD(PL),3]
  1496.    P$=Param$
  1497.    Screen Copy 1,73,285+16,87,285+20 To 1,73,16
  1498.    _DOTEXT[73,16,P$,0]
  1499.    Screen Copy 1,34,285+34,121,285+41 To 1,34,34
  1500.    _DOTEXT[35,35,_WEAP$(_PLWEAP(PL)),0]
  1501. End Proc
  1502.  
  1503. Procedure _ADDINFO[PL]
  1504.    Screen Open 2,320,13,16,Lowres
  1505.    Screen Hide 2
  1506.    Curs Off 
  1507.    Flash Off 
  1508.    Screen Copy 1,0,271,320,283 To 2,0,0
  1509.    Get Palette 1
  1510.    Palette ,,,,,,,,$0,$F0,$F,$FF0,$F00,$F0F,$FF,$F70
  1511.    Screen 0
  1512.    Screen 2
  1513.    _DOSTAR[7,6,PL]
  1514.    _DOTEXT[10,4,_PLNAME$(PL),1]
  1515.    _NUMTOSTRING[_ROUND,2]
  1516.    P$="ROUND "+Param$
  1517.    _NUMTOSTRING[_NUMROUNDS,2]
  1518.    P$=P$+" OF "+Param$
  1519.    _DOTEXT[256,4,P$,1]
  1520.    For _HEIGHT=206 To 194 Step -2
  1521.       If 206-_HEIGHT>1
  1522.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,206-_HEIGHT
  1523.          Screen Show 2
  1524.       End If 
  1525.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  1526.    Next 
  1527.    _HEIGHT=194
  1528. End Proc
  1529.  
  1530. Procedure _REMOVEINFO[PL]
  1531.    For _HEIGHT=195 To 207 Step 2
  1532.       If 206-_HEIGHT>1
  1533.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,206-_HEIGHT
  1534.          Screen Show 2
  1535.       Else 
  1536.          Screen Hide 2
  1537.       End If 
  1538.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  1539.    Next 
  1540.    _HEIGHT=207
  1541.    Screen Close 2
  1542. End Proc
  1543.  
  1544. Procedure _PLAYSAMP[_NUM]
  1545.    If _AUDIO=1
  1546.       Add _CH,1,0 To 3
  1547.       Sam Play 2^_CH,_NUM
  1548.    End If 
  1549. End Proc
  1550.  
  1551. Procedure _SHIELDSUP[_SHIELDTYPE,PL]
  1552.    SUCCESS=1
  1553.    If _PLSHIELD(PL)=>999 and _PLSHIELDTYPE(PL)=_SHIELDTYPE
  1554.       SUCCESS=0
  1555.    Else 
  1556.       FIRST=1
  1557.       For D=8 To 1 Step -1
  1558.          If FIRST=0
  1559.             _PLSHIELDTYPE(PL)=0
  1560.             _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  1561.             Wait D
  1562.          Else 
  1563.             FIRST=0
  1564.          End If 
  1565.          _PLSHIELDTYPE(PL)=_SHIELDTYPE
  1566.          _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  1567.       Next 
  1568.       _PLAYSAMP[12]
  1569.       _PLSHIELD(PL)=999
  1570.    End If 
  1571. End Proc[SUCCESS]
  1572.  
  1573. Procedure _LOOSEHEALTH[PL,_AMOUNT]
  1574.    If _PLHEALTH(PL)>0
  1575.       If _AMOUNT>0
  1576.          _AMOUNT=_AMOUNT*4
  1577.          If _PLSHIELDTYPE(PL)>0
  1578.             If _PLSHIELDTYPE(PL)=1
  1579.                _AMOUNT=_AMOUNT/2
  1580.             End If 
  1581.             If _PLSHIELDTYPE(PL)=2
  1582.                _AMOUNT=_AMOUNT/4
  1583.             End If 
  1584.             Add _PLSHIELD(PL),-_AMOUNT
  1585.             If _PLSHIELD(PL)<0
  1586.                _AMOUNT=-_PLSHIELD(PL)
  1587.                _PLSHIELD(PL)=0
  1588.                _PLSHIELDTYPE(PL)=0
  1589.             Else 
  1590.                _AMOUNT=0
  1591.             End If 
  1592.          End If 
  1593.          If _FIRPL<>PL
  1594.             _HIT=1
  1595.             Add _PLCASH(_FIRPL),Min(_PLHEALTH(PL),_AMOUNT)/_GENEROSITY
  1596.          End If 
  1597.          Add _PLHEALTH(PL),-_AMOUNT
  1598.          If _PLHEALTH(PL)<0
  1599.             _PLSHIELD(PL)=0
  1600.             _PLHEALTH(PL)=-1
  1601.             _PLALIVE(PL)=1
  1602.             _PLSHIELDTYPE(PL)=0
  1603.             Add _PLCASH(_FIRPL),100
  1604.             Inc _PLDEATHS(PL)
  1605.             If _FIRPL<>PL
  1606.                Inc _PLKILLS(_FIRPL)
  1607.             End If 
  1608.          End If 
  1609.       End If 
  1610.    End If 
  1611. End Proc
  1612.  
  1613. Procedure _WORKOUTHEALTHLOSS[X1,Y1,X2,Y2,SIZ]
  1614.    XD=X2-X1
  1615.    YD=Y2-Y1
  1616.    DIS=Sqr((XD*XD)+(YD*YD))
  1617.    LOSS=Max(0,SIZ-DIS)*4
  1618. End Proc[LOSS]
  1619.  
  1620. Procedure _DRAWINFO[_CMODE]
  1621.    Inc _ROUNDS_PLAYED
  1622.    '_cmode: 0="generating", 1="generating"+"statistics", 2="statistics" 
  1623.    Unpack 16 To 4
  1624.    Screen Hide 4
  1625.    If _CMODE=0 or _CMODE=1
  1626.       If _CMODE=0
  1627.          _PREVY1=101-(28*_NTSC)
  1628.       Else 
  1629.          _PREVY1=37-(11*_NTSC)
  1630.       End If 
  1631.       _SETUP[5]
  1632.       'add "generating" message
  1633.       Paste Bob 89,10,1075
  1634.       _NUMTOSTRING[_ROUND,2]
  1635.       A$=Param$
  1636.       _NUMTOSTRING[_NUMROUNDS,2]
  1637.       B$=Param$
  1638.       T$="Round "+A$+" of "+B$
  1639.       _DOTEXT2[160-(Len(T$)*2),26,T$,8]
  1640.       If _BITMAPLEVEL=0
  1641.          Restore _TERRAINDAT
  1642.          For Z=1 To _TERRAIN
  1643.             Read T$
  1644.          Next 
  1645.       Else 
  1646.          T$=_LEVEL$(_ROUND(_ROUND))+" (Bitmap)"
  1647.       End If 
  1648.       _DOTEXT2[120,46,"   Terrain",3]
  1649.       _DOTEXT2[164,46,T$,6]
  1650.       _NUMTOSTRING[Abs(_WIND),2]
  1651.       T$=" "+Param$
  1652.       If _WIND>0
  1653.          T$=">"+Param$
  1654.       End If 
  1655.       If _WIND<0
  1656.          T$="<"+Param$
  1657.       End If 
  1658.       _DOTEXT2[120,53,"      Wind",3]
  1659.       _DOTEXT2[164,53,T$,6]
  1660.       _DOTEXT2[120,60,"     Edges",3]
  1661.       _DOTEXT2[164,60,_EDGE$(_EDGETYPE),6]
  1662.       If _BITMAPLEVEL=0
  1663.          _DOTEXT2[120,67,"      Time",3]
  1664.          Restore _TIMEDAT
  1665.          For Z=0 To _TIME
  1666.             Read T$
  1667.          Next 
  1668.          _DOTEXT2[164,67,T$,6]
  1669.          NTY=74
  1670.       Else 
  1671.          NTY=67
  1672.       End If 
  1673.       _DOTEXT2[120,NTY,"Play order",3]
  1674.       N=0
  1675.       For SPL=0 To 6
  1676.          PL=_ORDER2(SPL)
  1677.          If(_PLTYPE(PL)>0 and _PLHEALTH(PL)=>0)
  1678.             Ink 9+PL,0,0
  1679.             Bar(N*4)+164,NTY To(N*4)+166,NTY+4
  1680.             Inc N
  1681.          End If 
  1682.       Next 
  1683.       _ADDSCREEN[5,_PREVY1]
  1684.    Else 
  1685.       _PREVY1=0
  1686.    End If 
  1687.    If _CMODE=1 or _CMODE=2
  1688.       If _CMODE=2
  1689.          _PREVY2=117-(28*_NTSC)
  1690.       Else 
  1691.          _PREVY2=166-(36*_NTSC)
  1692.       End If 
  1693.       _SETUP[6]
  1694.       ' add statistics 
  1695.       If _CMODE=2
  1696.          Paste Bob 110,10,1077
  1697.       Else 
  1698.          Paste Bob 121,10,1076
  1699.       End If 
  1700.       Restore _MONEYDAT
  1701.       R=Rnd(4)
  1702.       For Z=0 To R
  1703.          Read N$
  1704.       Next 
  1705.       _DOTEXT2[5,35,"Pos  Name                                     "+N$+" Hit ratio  Kills  Deaths",8]
  1706.       Dim _TMPINFO$(6),_TMPVALUE(6),_TMPWHO(6)
  1707.       _NUMALIVE=0
  1708.       For PL=0 To 6
  1709.          If _PLTYPE(PL)>0
  1710.             If _WINNER=PL
  1711.                TXT$="@ "
  1712.             Else 
  1713.                TXT$="  "
  1714.             End If 
  1715.             TXT$=TXT$+_PLNAME$(PL)+Space$(41-Len(_PLNAME$(PL)))
  1716.             _NUMTOSTRING[_PLCASH(PL),6]
  1717.             TXT$=TXT$+Param$+" "
  1718.             If _PLFIRED(PL)<>0
  1719.                _HITRATIO=(_PLHIT(PL)*100)/_PLFIRED(PL)
  1720.             Else 
  1721.                _HITRATIO=0
  1722.             End If 
  1723.             _NUMTOSTRING[_HITRATIO,3]
  1724.             TXT$=TXT$+"   "+Param$+"%   "
  1725.             _NUMTOSTRING[_PLKILLS(PL),3]
  1726.             TXT$=TXT$+"  "+Param$+"  "
  1727.             _NUMTOSTRING[_PLDEATHS(PL),3]
  1728.             TXT$=TXT$+"  "+Param$
  1729.             _TMPINFO$(_NUMALIVE)=TXT$
  1730.             _TMPVALUE(_NUMALIVE)=(_PLCASH(PL)*1000)+(_PLKILLS(PL)-_PLDEATHS(PL))
  1731.             _TMPWHO(_NUMALIVE)=PL
  1732.             Inc _NUMALIVE
  1733.          End If 
  1734.       Next 
  1735.       Repeat 
  1736.          CHANGED=0
  1737.          For Z=1 To _NUMALIVE-1
  1738.             If _TMPVALUE(Z-1)<_TMPVALUE(Z)
  1739.                Swap _TMPVALUE(Z-1),_TMPVALUE(Z)
  1740.                Swap _TMPWHO(Z-1),_TMPWHO(Z)
  1741.                Swap _TMPINFO$(Z-1),_TMPINFO$(Z)
  1742.                CHANGED=1
  1743.             End If 
  1744.          Next 
  1745.       Until CHANGED=0
  1746.       CPOS=1
  1747.       CVAL=_TMPVALUE(0)
  1748.       For Z=0 To _NUMALIVE-1
  1749.          If _TMPVALUE(Z)<CVAL
  1750.             CVAL=_TMPVALUE(Z)
  1751.             CPOS=Z+1
  1752.          End If 
  1753.          TXT$=Str$(CPOS)+" "+_TMPINFO$(Z)
  1754.          _DOTEXT2[5,(Z*7)+43,TXT$,8]
  1755.          _DOTEXT2[5,(Z*7)+43,TXT$,_TMPWHO(Z)+1]
  1756.       Next 
  1757.       Add _TOTAL_PLAYTIME,Timer
  1758.       _SECS=Timer/50
  1759.       _MINS=_SECS/60
  1760.       Add _SECS,-60*_MINS
  1761.       TXT$="The previous round lasted"+Str$(_MINS)+" minute(s) and"
  1762.       TXT$=TXT$+Str$(_SECS)+" second(s)."
  1763.       _DOTEXT2[160-(Len(TXT$)*2),100,TXT$,8]
  1764.       _ADDSCREEN[6,_PREVY2]
  1765.    Else 
  1766.       _PREVY2=0
  1767.    End If 
  1768.    Screen Close 4
  1769.    View 
  1770.    Wait Vbl 
  1771.    
  1772.    _TERRAINDAT:
  1773.    Data "Mountains","City","Wastelands","Ice","Desert","Alien"
  1774.    
  1775.    _MONEYDAT:
  1776.    Data " Dosh "," Cash ","Money ","Wonga ","Dough "
  1777.    
  1778.    _TIMEDAT:
  1779.    Data "Daytime","Dusk","Nighttime"
  1780. End Proc
  1781.  
  1782. Procedure _ADDSCREEN[_NUM,DY]
  1783.    Screen Show _NUM
  1784.    For Y=330 To DY Step -8
  1785.       Screen Display _NUM,128,Y,320,160
  1786.       View 
  1787.       Wait Vbl 
  1788.    Next 
  1789. End Proc
  1790.  
  1791. Procedure _KILLINFO
  1792.    _FORCE=0
  1793.    If _PREVY1<>0
  1794.       Screen 5
  1795.       N$="Press a mouse button to continue the massacre..."
  1796.       If _ROUND=1
  1797.          _FORCE=1
  1798.          N$="Press a mouse button to begin the slaughter..."
  1799.       End If 
  1800.       If _ROUND=_NUMROUNDS
  1801.          N$="Press a mouse button to enter the final battle..."
  1802.       End If 
  1803.    Else 
  1804.       Screen 6
  1805.       N$="Press a mouse button to continue..."
  1806.       _FORCE=1
  1807.    End If 
  1808.    If _FORCE=1
  1809.       _DOTEXT2[315-(4*Len(N$)),117,N$,8]
  1810.    Else 
  1811.       _DOTEXT2[315-(4*Len(N$)),117-(_NTSC*21),N$,8]
  1812.    End If 
  1813.    _QUIT=0
  1814.    Repeat 
  1815.       If Asc(Inkey$)=27
  1816.          For Z=0 To 6
  1817.             _PLHEALTH(Z)=-1
  1818.             _PLALIVE(Z)=0
  1819.          Next 
  1820.          _QUIT=1
  1821.       End If 
  1822.       Led Off 
  1823.       Wait Vbl 
  1824.       _CHECKTUNE
  1825.       MK=Mouse Key
  1826.       If Key State(68) or Key State(64)
  1827.          MK=1
  1828.       End If 
  1829.    Until MK<>0 or _QUIT=1
  1830.    If _PREVY1<>0
  1831.       _REMOVESCREEN[5,_PREVY1]
  1832.       Screen Close 5
  1833.    End If 
  1834.    If _PREVY2<>0
  1835.       _REMOVESCREEN[6,_PREVY2]
  1836.       Screen Close 6
  1837.    End If 
  1838.    Repeat 
  1839.       Wait Vbl 
  1840.    Until Mouse Key=0 or _QUIT=1
  1841.    Timer=0
  1842. End Proc[_QUIT]
  1843.  
  1844. Procedure _REMOVESCREEN[_NUM,DY]
  1845.    For Y=DY To -100 Step -8
  1846.       Screen Display _NUM,128,Y,320,160
  1847.       View 
  1848.       Wait Vbl 
  1849.    Next 
  1850. End Proc
  1851.  
  1852. Procedure _DOTEXT2[X,Y,TXT$,C]
  1853.    If Len(TXT$)>0
  1854.       _AD=553+(C*58)
  1855.       TXT$=Upper$(TXT$)
  1856.       For Z=1 To Len(TXT$)
  1857.          M$=Mid$(TXT$,Z,1)
  1858.          A=Asc(M$)
  1859.          If A>32
  1860.             Paste Bob X+((Z-1)*4),Y,_AD+(A-33)
  1861.          End If 
  1862.       Next 
  1863.    End If 
  1864. End Proc
  1865.  
  1866. Procedure _SETUP[_NUM]
  1867.    Screen Open _NUM,320,128,16,Lowres
  1868.    Screen Hide _NUM
  1869.    Flash Off 
  1870.    Curs Off 
  1871.    Cls 0
  1872.    Get Palette 4
  1873.    Screen Copy 4,0,0,320,128 To _NUM,0,0
  1874. End Proc
  1875.  
  1876. Procedure _LIGHTNING
  1877.    If _BITMAPLEVEL=0
  1878.       _PLAYSAMP[6]
  1879.       _PLAYSAMP[6]
  1880.       _SELECTCOLOUR
  1881.       _CCOL=Colour(8)
  1882.       For A=1 To 4
  1883.          If _TERRAIN=1
  1884.             Palette $0,$210,$521,$831,$B52,$40,$60,$80,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1885.          End If 
  1886.          If _TERRAIN=2
  1887.             Palette $0,$555,$666,$777,$888,$999,$AAA,$BBB,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1888.          End If 
  1889.          If _TERRAIN=3
  1890.             Palette $0,$731,$832,$942,$A42,$831,$742,$552,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1891.          End If 
  1892.          If _TERRAIN=4
  1893.             Palette $0,$6CC,$7DD,$8EE,$9FF,$AFF,$BFF,$CFF,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1894.          End If 
  1895.          If _TERRAIN=5
  1896.             Palette $0,$770,$880,$990,$AA0,$BB0,$CC0,$DD0,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1897.          End If 
  1898.          If _TERRAIN=6
  1899.             Palette $0,$A0A,$909,$808,$707,$B,$D,$F,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1900.          End If 
  1901.          Wait 1
  1902.          For Z=0 To 31
  1903.             Colour Z,$FFF
  1904.          Next 
  1905.          Wait 1
  1906.       Next 
  1907.       If _TERRAIN=1
  1908.          Fade 2,$0,$210,$521,$831,$B52,$40,$60,$80,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1909.       End If 
  1910.       If _TERRAIN=2
  1911.          Fade 2,$0,$555,$666,$777,$888,$999,$AAA,$BBB,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1912.       End If 
  1913.       If _TERRAIN=3
  1914.          Fade 2,$0,$731,$832,$942,$A42,$831,$742,$552,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1915.       End If 
  1916.       If _TERRAIN=4
  1917.          Fade 2,$0,$6CC,$7DD,$8EE,$9FF,$AFF,$BFF,$CFF,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1918.       End If 
  1919.       If _TERRAIN=5
  1920.          Fade 2,$0,$770,$880,$990,$AA0,$BB0,$CC0,$DD0,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1921.       End If 
  1922.       If _TERRAIN=6
  1923.          Fade 2,$0,$A0A,$909,$808,$707,$B,$D,$F,_CCOL,,,,,,,,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  1924.       End If 
  1925.    End If 
  1926. End Proc
  1927.  
  1928. Procedure _ROLLER[X,Y,_TY]
  1929.    Screen 0
  1930.    While Extension_12_0470(X,Y+1)<>0
  1931.       Dec Y
  1932.    Wend 
  1933.    TX=1
  1934.    _DIR=0
  1935.    Repeat 
  1936.       If Extension_12_0470(X-TX,Y+2)=0
  1937.          _DIR=-1
  1938.       End If 
  1939.       If Extension_12_0470(X+TX+1,Y+2)=0
  1940.          _DIR=1
  1941.       End If 
  1942.       Inc TX
  1943.    Until _DIR<>0 or TX>960
  1944.    Repeat 
  1945.       If _DIR>0
  1946.          TD=2
  1947.       Else 
  1948.          TD=-1
  1949.       End If 
  1950.       If Extension_12_0470(X+TD,Y+2)<>0 and Extension_12_0470(X+TD,Y+1)<>0
  1951.          _DIR=0
  1952.       End If 
  1953.        Extension_12_0394 X,Y,0
  1954.        Extension_12_0394 X+1,Y,0
  1955.        Extension_12_0394 X,Y+1,0
  1956.        Extension_12_0394 X+1,Y+1,0
  1957.       _CHECKCOL[X,Y]
  1958.       If Param<>0
  1959.          _DIR=0
  1960.       End If 
  1961.       If _DIR<>0
  1962.          Add X,_DIR
  1963.          While Extension_12_0470(X,Y+2)=0
  1964.             Inc Y
  1965.          Wend 
  1966.           Extension_12_0394 X,Y,8
  1967.           Extension_12_0394 X+1,Y,8
  1968.           Extension_12_0394 X,Y+1,8
  1969.           Extension_12_0394 X+1,Y+1,8
  1970.          _UPDATESCREEN[X,Y]
  1971.       End If 
  1972.    Until _DIR=0
  1973.    If _TY=0
  1974.       _ADDEXPLOSION[0,X,Y,15,0]
  1975.    Else 
  1976.       If _TY=1
  1977.          _ADDEXPLOSION[0,X,Y,30,0]
  1978.       Else 
  1979.          _ADDEXPLOSION[0,X,Y,-30,0]
  1980.       End If 
  1981.    End If 
  1982. End Proc
  1983.  
  1984. Procedure _CHECKCOL[X,Y]
  1985.    _DETONATE=0
  1986.    For Z=0 To 6
  1987.       If Z<>_FIRPL
  1988.          If _PLHEALTH(Z)=>0 and _PLTYPE(Z)>0
  1989.             If X=>_PLX(Z)-6 and X<=_PLX(Z)+6 and Y=>_PLY(Z)-8 and Y<=_PLY(Z)
  1990.                _DETONATE=Z+1
  1991.             End If 
  1992.          End If 
  1993.       End If 
  1994.    Next 
  1995. End Proc[_DETONATE]
  1996.  
  1997. Procedure _REALLIGHTNING[AX]
  1998.    _C=Colour(8)
  1999.    Flash 8,"(FFF,1)(000,1)"
  2000.    Dim X(29),XS(29)
  2001.    X(0)=AX*8
  2002.    XS(0)=Rnd(8)-4
  2003.    For Z=1 To 29
  2004.       X(Z)=-1
  2005.    Next 
  2006.    Y=0
  2007.    _MINX=999
  2008.    _MAXX=0
  2009.    AY=511
  2010.    _PLAYSAMP[6]
  2011.    For Y=0 To 511
  2012.       _DONE=1
  2013.       For Z=0 To 29
  2014.          If X(Z)=>0
  2015.             If X(Z)/8<_MINX
  2016.                _MINX=X(Z)/8
  2017.             End If 
  2018.             If X(Z)/8>_MAXX
  2019.                _MAXX=X(Z)/8
  2020.             End If 
  2021.             If Extension_12_0470(X(Z)/8,Y)=0
  2022.                 Extension_12_0394 X(Z)/8,Y,8
  2023.                OKAY=1
  2024.                _DONE=0
  2025.             Else 
  2026.                OKAY=0
  2027.             End If 
  2028.             Add X(Z),XS(Z)
  2029.             If OKAY=1
  2030.                If Extension_12_0470(X(Z)/8,Y+1)<>0
  2031.                   For PL=0 To 6
  2032.                      _WORKOUTHEALTHLOSS[X(Z)/8,Y+1,_PLX(PL),_PLY(PL),15]
  2033.                      LOSS=Param
  2034.                      _LOOSEHEALTH[PL,LOSS]
  2035.                   Next 
  2036.                End If 
  2037.             End If 
  2038.             If Rnd(30)=1
  2039.                XS(Z)=Rnd(8)-4
  2040.                SPT=-1
  2041.                For T=0 To 29
  2042.                   If X(T)=-1
  2043.                      SPT=T
  2044.                      T=100
  2045.                   End If 
  2046.                Next 
  2047.                If SPT<>-1
  2048.                   X(SPT)=X(Z)
  2049.                   XS(SPT)=Rnd(8)-4
  2050.                End If 
  2051.             End If 
  2052.          End If 
  2053.       Next 
  2054.       If _DONE=1
  2055.          AY=Y
  2056.          Y=512
  2057.       End If 
  2058.    Next 
  2059.    For Y=0 To AY
  2060.       For X=_MINX To _MAXX
  2061.          If Extension_12_0470(X,Y)=8
  2062.              Extension_12_0394 X,Y,0
  2063.          End If 
  2064.       Next 
  2065.    Next 
  2066.    Flash Off 
  2067.    Colour 8,_C
  2068. End Proc
  2069.  
  2070. Procedure _DEATH[PL]
  2071.    Inc _TANKS_DESTROYED
  2072.    If _SKIPVBL=0
  2073.       Screen Open 2,320,13,16,Lowres
  2074.       Screen Hide 2
  2075.       Curs Off 
  2076.       Flash Off 
  2077.       Screen Copy 1,0,271,320,283 To 2,0,0
  2078.       Get Palette 1
  2079.       Palette ,,,,,,,,$0,$F0,$F,$FF0,$F00,$F0F,$FF,$F70
  2080.       Screen 0
  2081.       Screen 2
  2082.       MES$=_DEATHMESSAGE$(Rnd(_NUMDEATHMESSAGE-2))
  2083.       _DOSTAR[7,6,PL]
  2084.       _DOTEXT[10,4,MES$,1]
  2085.       For _HEIGHT=256 To 242 Step -1
  2086.          If 255-_HEIGHT>1
  2087.             Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,255-_HEIGHT
  2088.             Screen Show 2
  2089.             Screen To Front 2
  2090.          End If 
  2091.          _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2092.       Next 
  2093.       Repeat 
  2094.          _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2095.       Until Param<>1
  2096.       ' Do death 
  2097.       Shift Off 
  2098.       If _TYPE=2
  2099.          R=Rnd(1)
  2100.       Else 
  2101.          R=Rnd(2)
  2102.       End If 
  2103.       If R=0
  2104.          ' Explode
  2105.          Screen 0
  2106.          Dim PX(999),PY(999),PXS(999),PYS(999),PC(999),PB(999)
  2107.          For Z=0 To 999
  2108.             PX(Z)=(_PLX(PL)*16)+Rnd(128)-64
  2109.             PY(Z)=(_PLY(PL)-4)*16
  2110.             PXS(Z)=Rnd(32)-16
  2111.             PYS(Z)=-Rnd(64)
  2112.             PC(Z)=Rnd(6)+9
  2113.             PB(Z)=Rnd(2)+1
  2114.             TMP= Extension_12_0470(PX(Z)/16,PY(Z)/16)
  2115.             If TMP<>0 and TMP<9
  2116.                PB(Z)=0
  2117.             End If 
  2118.          Next 
  2119.          _DOCOLOURS
  2120.          _PLALIVE(PL)=0
  2121.          _PLAYSAMP[3]
  2122.          _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2123.          MX=0
  2124.          _ALLDONE=0
  2125.          Repeat 
  2126.             _ALLDONE=1
  2127.             If MX=0
  2128.                CT=Timer
  2129.                Repeat 
  2130.                   If PB(MX)>0
  2131.                      _ALLDONE=0
  2132.                       Extension_12_0394 PX(MX)/16,PY(MX)/16,0
  2133.                      OPX=PX(MX)
  2134.                      OPY=PY(MX)
  2135.                      Add PX(MX),PXS(MX)
  2136.                      Add PY(MX),PYS(MX)
  2137.                      Inc PYS(MX)
  2138.                      TMP= Extension_12_0470(PX(MX)/16,PY(MX)/16)
  2139.                      If TMP<>0 and TMP<9
  2140.                         Dec PB(MX)
  2141.                         PX(MX)=OPX
  2142.                         PY(MX)=OPY
  2143.                         PYS(MX)=-Abs(PYS(MX)/2)
  2144.                      End If 
  2145.                      If PB(MX)>0
  2146.                          Extension_12_0394 PX(MX)/16,PY(MX)/16,PC(MX)
  2147.                      End If 
  2148.                   End If 
  2149.                   Inc MX
  2150.                Until Timer>CT or MX>999
  2151.                If MX>999
  2152.                   MX=999
  2153.                End If 
  2154.             Else 
  2155.                For Z=0 To MX
  2156.                   If PB(Z)>0
  2157.                      _ALLDONE=0
  2158.                       Extension_12_0394 PX(Z)/16,PY(Z)/16,0
  2159.                      OPX=PX(Z)
  2160.                      OPY=PY(Z)
  2161.                      Add PX(Z),PXS(Z)
  2162.                      Add PY(Z),PYS(Z)
  2163.                      Inc PYS(Z)
  2164.                      TMP= Extension_12_0470(PX(Z)/16,PY(Z)/16)
  2165.                      If TMP<>0 and TMP<9
  2166.                         Dec PB(Z)
  2167.                         PX(Z)=OPX
  2168.                         PY(Z)=OPY
  2169.                         PYS(Z)=-Abs(PYS(Z)/2)
  2170.                      End If 
  2171.                      If PB(Z)>0
  2172.                          Extension_12_0394 PX(Z)/16,PY(Z)/16,PC(Z)
  2173.                      End If 
  2174.                   End If 
  2175.                Next 
  2176.                Wait Vbl 
  2177.             End If 
  2178.          Until _ALLDONE=1
  2179.       End If 
  2180.       If R=1
  2181.          ' Beam up
  2182.          _PLAYSAMP[7]
  2183.          Palette ,,,,,,,,,$7F,$28F,$49F,$6AF,$8BF,$ACF,$CDF
  2184.          Shift Up 1,9,15,1
  2185.          CL=9
  2186.          For X=0 To 8
  2187.             BY=512
  2188.             For Y=0 To 511
  2189.                If Extension_12_0470((_PLX(PL)-1)-X,Y)<>0
  2190.                   BY=Y-1
  2191.                   Y=512
  2192.                End If 
  2193.             Next 
  2194.             B2Y=512
  2195.             For Y=0 To 511
  2196.                If Extension_12_0470((_PLX(PL)-1)+X,Y)<>0
  2197.                   B2Y=Y-1
  2198.                   Y=512
  2199.                End If 
  2200.             Next 
  2201.             Add CL,1,9 To 15
  2202.             Ink CL,0,0
  2203.             Draw(_PLX(PL)-1)-X,0 To(_PLX(PL)-1)-X,BY
  2204.             Draw(_PLX(PL)-1)+X,0 To(_PLX(PL)-1)+X,B2Y
  2205.          Next 
  2206.          _PLAYSAMP[7]
  2207.          SY=_PLY(PL)
  2208.          For Y=SY To -1 Step -2
  2209.             _PLY(PL)=Y
  2210.             _UPDATESCREEN[_PLX(PL),Y]
  2211.          Next 
  2212.          Ink 0,0,0
  2213.          For X=0 To 8
  2214.             BY=512
  2215.             For Y=0 To 511
  2216.                P= Extension_12_0470((_PLX(PL)-1)-X,Y)
  2217.                If P>0 and P<8
  2218.                   BY=Y-1
  2219.                   Y=512
  2220.                End If 
  2221.             Next 
  2222.             B2Y=512
  2223.             For Y=0 To 511
  2224.                P= Extension_12_0470((_PLX(PL)-1)+X,Y)
  2225.                If P>0 and P<8
  2226.                   B2Y=Y-1
  2227.                   Y=512
  2228.                End If 
  2229.             Next 
  2230.             Draw(_PLX(PL)-1)-X,0 To(_PLX(PL)-1)-X,BY
  2231.             Draw(_PLX(PL)-1)+X,0 To(_PLX(PL)-1)+X,B2Y
  2232.          Next 
  2233.          Shift Off 
  2234.       End If 
  2235.       If R=2
  2236.          _PLALIVE(PL)=0
  2237.          _PLAYSAMP[4]
  2238.          _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2239.          _ADDDIRT[0,_PLX(PL),_PLY(PL)]
  2240.          _FORCEDROP=1
  2241.          _REMOVEEXPLOSIONS
  2242.       End If 
  2243.       For _HEIGHT=242 To 256 Step 1
  2244.          If 255-_HEIGHT>1
  2245.             Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,255-_HEIGHT
  2246.             Screen Show 2
  2247.             Screen To Front 2
  2248.          End If 
  2249.          _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2250.       Next 
  2251.       _HEIGHT=256
  2252.       Screen Close 2
  2253.    End If 
  2254. End Proc
  2255.  
  2256. Procedure _ADDSHOOT[PL]
  2257.    Screen Open 2,320,13,16,Lowres
  2258.    Screen Hide 2
  2259.    Curs Off 
  2260.    Flash Off 
  2261.    Screen Copy 1,0,271,320,283 To 2,0,0
  2262.    Get Palette 1
  2263.    Palette ,,,,,,,,$0,$F0,$F,$FF0,$F00,$F0F,$FF,$F70
  2264.    Screen 0
  2265.    Screen 2
  2266.    MES$=_SHOOTMESSAGE$(Rnd(_NUMSHOOTMESSAGE-2))
  2267.    _DOSTAR[7,6,PL]
  2268.    _DOTEXT[10,4,MES$,1]
  2269.    For _HEIGHT=256 To 242 Step -1
  2270.       If 255-_HEIGHT>1
  2271.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,255-_HEIGHT
  2272.          Screen Show 2
  2273.          Screen To Front 2
  2274.       End If 
  2275.       _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2276.    Next 
  2277.    _HEIGHT=242
  2278.    Repeat 
  2279.       _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  2280.    Until Param<>1
  2281. End Proc
  2282.  
  2283. Procedure _REMOVESHOOT
  2284.    For _HEIGHT=242 To 256 Step 1
  2285.       If 255-_HEIGHT>1
  2286.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,255-_HEIGHT
  2287.          Screen Show 2
  2288.          Screen To Front 2
  2289.       End If 
  2290.       _UPDATESCREEN[_OFX+160,_OFY+((_HEIGHT-(_NTSC*56))/2)]
  2291.    Next 
  2292.    _HEIGHT=256
  2293.    Screen Close 2
  2294. End Proc
  2295.  
  2296. Procedure _DRAWMAINSCREEN
  2297.    Screen Copy 4,0,4,320,182 To 2,0,4
  2298.    Screen 2
  2299.    Reserve Zone 5
  2300.    Paste Bob 93,6,1201
  2301.    N$="Please select an option:"
  2302.    _DOTEXT3[162-(Len(N$)*2),60,N$,0]
  2303.    _DOBOX[134,70,"Instructions",1]
  2304.    _DOBOX[134,80,"Options",2]
  2305.    _DOBOX[134,90,"Setup",3]
  2306.    _DOBOX[134,110,"Play!",4]
  2307.    _DOBOX[134,170,"Quit",5]
  2308. End Proc
  2309.  
  2310. Procedure _DOBOX[X,Y,TXT$,ZN]
  2311.    Screen 2
  2312.    Set Zone ZN,X,Y To X+52,Y+7
  2313.    Paste Bob X,Y,1197
  2314.    _DOTEXT3[X+27-(Len(TXT$)*2),Y+1,TXT$,1]
  2315. End Proc
  2316.  
  2317. Procedure _DOBOX2[X,Y,TXT$,CT,ZN]
  2318.    Screen 2
  2319.    Set Zone ZN,X,Y To X+179,Y+9
  2320.    Set Zone ZN+1,X+180,Y-5 To X+198,Y+13
  2321.    '   Screen 3 
  2322.    Paste Bob X,Y,1196
  2323.    _AD=0
  2324.    If CT=0
  2325.       BN=1200
  2326.    End If 
  2327.    If CT=1
  2328.       BN=1198
  2329.    End If 
  2330.    If CT=2
  2331.       _AD=2
  2332.       BN=1199
  2333.    End If 
  2334.    Paste Bob X+180+_AD,Y-5,BN
  2335.    _DOTEXT3[X+94-(Len(TXT$)*2),Y+2,TXT$,1]
  2336. End Proc
  2337.  
  2338. Procedure _DOTEXT3[X,Y,TXT$,C]
  2339.    If Len(TXT$)>0
  2340.       If C>1
  2341.          Add C,-2
  2342.          _AD=1214+(C*59)
  2343.       Else 
  2344.          _AD=1079+(C*59)
  2345.       End If 
  2346.       TXT$=Upper$(TXT$)
  2347.       For Z=1 To Len(TXT$)
  2348.          M$=Mid$(TXT$,Z,1)
  2349.          A=Asc(M$)
  2350.          If A>32
  2351.             Paste Bob X+((Z-1)*4),Y,_AD+(A-33)
  2352.          End If 
  2353.       Next 
  2354.    End If 
  2355. End Proc
  2356.  
  2357. Procedure _DOSTUFF[_SPECIAL]
  2358.    Screen 2
  2359.    Screen Swap 
  2360.    Repeat 
  2361.       _CHECKTUNE
  2362.       Screen 2
  2363.       Limit Mouse 128,118-(_NTSC*33) To 448,293-(_NTSC*33)
  2364.       Sprite 1,X Mouse,Y Mouse,1205
  2365.       Sprite Update 
  2366.       If _SPECIAL=1
  2367.          _RENDERMAP
  2368.       Else 
  2369.          Wait Vbl 
  2370.       End If 
  2371.       MK=Mouse Key
  2372.    Until MK<>0
  2373.    Repeat 
  2374.       _CHECKTUNE
  2375.       Screen 2
  2376.       Limit Mouse 128,118-(_NTSC*33) To 448,293-(_NTSC*33)
  2377.       Sprite 1,X Mouse,Y Mouse,1206
  2378.       Sprite Update 
  2379.       If _SPECIAL=1
  2380.          _RENDERMAP
  2381.       Else 
  2382.          Wait Vbl 
  2383.       End If 
  2384.    Until Mouse Key=0
  2385.    Screen 2
  2386. End Proc[MK]
  2387.  
  2388. Procedure _DRAWINSTRUCTIONS
  2389.    Screen Copy 4,0,4,320,182 To 2,0,4
  2390.    Screen 2
  2391.    Reserve Zone 8
  2392.    '   Screen 3 
  2393.    Paste Bob 77,6,1203
  2394.    N$="Please select a topic:"
  2395.    _DOTEXT3[162-(Len(N$)*2),60,N$,0]
  2396.    _DOBOX[134,170,"Main Menu",1]
  2397.    _DOBOX[134,70,"Introduction",2]
  2398.    _DOBOX[134,80,"Interface",3]
  2399.    _DOBOX[134,90,"Weapons",4]
  2400.    _DOBOX[134,100,"Configuring",5]
  2401.    _DOBOX[134,110,"Customising",6]
  2402.    _DOBOX[134,120,"Credits",7]
  2403.    _DOBOX[134,130,"About",8]
  2404. End Proc
  2405.  
  2406. Procedure _DOINSTRUCTIONS
  2407.    Repeat 
  2408.       _DRAWINSTRUCTIONS
  2409.       Screen 2
  2410.       Get Palette 4
  2411.       _DOSTUFF[0]
  2412.       M=Mouse Zone
  2413.       If M>1
  2414.          Screen Open 6,320,170,32,Lowres
  2415.          Screen Hide 6
  2416.          Curs Off 
  2417.          Flash Off 
  2418.          Cls 0
  2419.          _NUMLINES=0
  2420.          _OFLINES=0
  2421.          If M=2
  2422.             _DOINSTRUCTIONS_AIM
  2423.          End If 
  2424.          If M=3
  2425.             _DOINSTRUCTIONS_INTERFACE
  2426.          End If 
  2427.          If M=4
  2428.             _DOINSTRUCTIONS_WEAPONS
  2429.          End If 
  2430.          If M=5
  2431.             _DOINSTRUCTIONS_CONFIGURING
  2432.          End If 
  2433.          If M=6
  2434.             _DOINSTRUCTIONS_CUSTOMISING
  2435.          End If 
  2436.          If M=7
  2437.             _DOINSTRUCTIONS_ABOUT
  2438.          End If 
  2439.          If M=8
  2440.             _DOINSTRUCTIONS_STATISTICS
  2441.          End If 
  2442.          Screen Close 6
  2443.       End If 
  2444.    Until M=1
  2445.    Screen 2
  2446. End Proc
  2447.  
  2448. Procedure _DOINSTRUCTIONS_DRAW
  2449.    Screen Copy 4,0,4,320,182 To 2,0,4
  2450.    Screen 2
  2451.    Reserve Zone 3
  2452.    '   Screen 3 
  2453.    Paste Bob 77,6,1203
  2454.    If _NUMLINES>22
  2455.       P$=Str$(((_OFLINES+22)*100)/_NUMLINES)+"%"
  2456.    Else 
  2457.       P$=" 100%"
  2458.    End If 
  2459.    _DOTEXT3[245,171,P$,0]
  2460.    _DOBOX[134,170,"Topics Menu",1]
  2461.    If _NUMLINES-_OFLINES>22
  2462.       _DOBOX[60,170,"Next line",2]
  2463.    End If 
  2464.    If _OFLINES>0
  2465.       _DOBOX[4,170,"Prev line",3]
  2466.    End If 
  2467. End Proc
  2468.  
  2469. Procedure _DOINSTRUCTIONS_UPDATE
  2470.    Get Bob 6,NNN+1,0,30 To 320,163
  2471.    Screen 2
  2472.    Paste Bob 0,30,NNN+1
  2473.    Del Bob NNN+1
  2474.    Screen Swap 
  2475. End Proc
  2476.  
  2477. Procedure _DOINSTRUCTIONS_WRITELINE[_CY,TXT$]
  2478.    _COL=8
  2479.    _CX=4
  2480.    _POS=0
  2481.    Screen 6
  2482.    
  2483.    While _POS<Len(TXT$)
  2484.       Inc _POS
  2485.       C$=Mid$(TXT$,_POS,1)
  2486.       If C$="$"
  2487.          C$=Mid$(TXT$,_POS+1,1)
  2488.          If C$="1"
  2489.             _COL=2
  2490.          End If 
  2491.          If C$="2"
  2492.             _COL=3
  2493.          End If 
  2494.          If C$="3"
  2495.             _COL=4
  2496.          End If 
  2497.          If C$="4"
  2498.             _COL=5
  2499.          End If 
  2500.          If C$="5"
  2501.             _COL=6
  2502.          End If 
  2503.          If C$="6"
  2504.             _COL=7
  2505.          End If 
  2506.          If C$="7"
  2507.             _COL=8
  2508.          End If 
  2509.          Inc _POS
  2510.       Else 
  2511.          _DOTEXT3[_CX,_CY,C$,_COL]
  2512.          Add _CX,4
  2513.       End If 
  2514.    Wend 
  2515. End Proc
  2516.  
  2517. Procedure _DOINSTRUCTIONS_SCROLLDOWN
  2518.    Inc _OFLINES
  2519.    Screen 6
  2520.    Screen Copy 6,0,36,320,170 To 6,0,30
  2521.    _DOINSTRUCTIONS_WRITELINE[156,_LINES$(_OFLINES+21)]
  2522. End Proc
  2523.  
  2524. Procedure _DOINSTRUCTIONS_SCROLLUP
  2525.    Dec _OFLINES
  2526.    Screen 6
  2527.    Screen Copy 6,0,20,320,156 To 6,0,26
  2528.    _DOINSTRUCTIONS_WRITELINE[30,_LINES$(_OFLINES)]
  2529. End Proc
  2530.  
  2531. Procedure _DOINSTRUCTIONS_WRITEALL
  2532.    Screen 6
  2533.    Cls 0
  2534.    _COF=_OFLINES
  2535.    For Y=0 To 21
  2536.       _DOINSTRUCTIONS_WRITELINE[(Y*6)+30,_LINES$(_COF)]
  2537.       Inc _COF
  2538.    Next 
  2539. End Proc
  2540.  
  2541. Procedure _DOINSTRUCTIONS_STUFF
  2542.    Screen 2
  2543.    '   Screen Swap  
  2544.    Repeat 
  2545.       _CHECKTUNE
  2546.       '      Screen Copy 3,0,4,320,182 To 2,0,4
  2547.       Limit Mouse 128,125 To 448,303
  2548.       Sprite 1,X Mouse,Y Mouse,1205
  2549.       Sprite Update 
  2550.       Wait Vbl 
  2551.       MK=Mouse Key
  2552.       If Key Shift mod 4>0
  2553.          If Key State(77)
  2554.             Add _OFLINES,21
  2555.             If _OFLINES>_NUMLINES-22
  2556.                _OFLINES=_NUMLINES-22
  2557.             End If 
  2558.             _DOINSTRUCTIONS_WRITEALL
  2559.             _DOINSTRUCTIONS_DRAW
  2560.             _DOINSTRUCTIONS_UPDATE
  2561.             Screen 2
  2562.          End If 
  2563.          If Key State(76)
  2564.             Add _OFLINES,-21
  2565.             If _OFLINES<0
  2566.                _OFLINES=0
  2567.             End If 
  2568.             _DOINSTRUCTIONS_WRITEALL
  2569.             _DOINSTRUCTIONS_DRAW
  2570.             _DOINSTRUCTIONS_UPDATE
  2571.             Screen 2
  2572.          End If 
  2573.       Else 
  2574.          If Key State(77)
  2575.             MK=8
  2576.             M=2
  2577.          End If 
  2578.          If Key State(76)
  2579.             MK=8
  2580.             M=3
  2581.          End If 
  2582.       End If 
  2583.    Until MK<>0
  2584.    If MK<8
  2585.       M=Mouse Zone
  2586.    End If 
  2587. End Proc[M]
  2588.  
  2589. Procedure _DOINSTRUCTIONS_AIM
  2590.    Restore _AIMDAT
  2591.    Read N$
  2592.    While N$<>"END"
  2593.       _LINES$(_NUMLINES)=N$
  2594.       Inc _NUMLINES
  2595.       Read N$
  2596.    Wend 
  2597.    For Z=_NUMLINES To _NUMLINES+21
  2598.       _LINES$(Z)=""
  2599.    Next 
  2600.    _DOINSTRUCTIONS_WRITEALL
  2601.    _DOINSTRUCTIONS_DRAW
  2602.    _DOINSTRUCTIONS_UPDATE
  2603.    Screen 2
  2604.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  2605.    Repeat 
  2606.       _DOINSTRUCTIONS_STUFF
  2607.       M=Param
  2608.       If M=2
  2609.          If _NUMLINES-_OFLINES>22
  2610.             _DOINSTRUCTIONS_SCROLLDOWN
  2611.             _DOINSTRUCTIONS_DRAW
  2612.             _DOINSTRUCTIONS_UPDATE
  2613.          End If 
  2614.       End If 
  2615.       If M=3
  2616.          If _OFLINES>0
  2617.             _DOINSTRUCTIONS_SCROLLUP
  2618.             _DOINSTRUCTIONS_DRAW
  2619.             _DOINSTRUCTIONS_UPDATE
  2620.          End If 
  2621.       End If 
  2622.    Until M=1
  2623.    
  2624.    _AIMDAT:
  2625.    Data "$4Overview:"
  2626.    Data ""
  2627.    Data " You control one of seven tanks. The others are controlled by other human"
  2628.    Data " players, by the computer, or are disabled. The aim of the game is to have,"
  2629.    Data " after a predetermined number of rounds, the most money. The tanks are"
  2630.    Data " controlled by altering the angle of the turret as well as the power of the"
  2631.    Data " shot."
  2632.    Data ""
  2633.    Data ""
  2634.    Data "$4How to gain money:"
  2635.    Data ""
  2636.    Data " $1#$7Destroy opposing tanks. You gain a certain amount of money for each unit"
  2637.    Data "  of health you take off an opponent (the actual figure depends on the"
  2638.    Data "  'cash rewards' setting - see $5configuring$7)"
  2639.    Data "  Furthermore, killing the tank gains you an additional 100 Cr."
  2640.    Data ""
  2641.    Data " $1#$7Win the round. This gains you 250 Cr."
  2642.    Data ""
  2643.    Data " $1#$7Earn interest. This rate can be altered - see $5configuring"
  2644.    Data ""
  2645.    Data ""
  2646.    Data "$4Spending money:"
  2647.    Data ""
  2648.    Data " Unlike other similar games, money is spent as the game progresses, rather"
  2649.    Data " than in advance at a 'shop'. Items that you can buy can be split into two"
  2650.    Data " categories: offence and defence. See $5weapons"
  2651.    Data ""
  2652.    Data ""
  2653.    Data "$4The information screen:"
  2654.    Data ""
  2655.    Data " This is displayed between levels. It consists of two sections:"
  2656.    Data ""
  2657.    Data "  $1#$7The 'terrain generation' (not displayed after the final match). Tells"
  2658.    Data "   you about the next match - what the wind will be, what time of day it is"
  2659.    Data "   and what type of terrain is being generated."
  2660.    Data "  $1#$7The 'statistics' screen (not displayed before the first match). Displays"
  2661.    Data "   the current rank of every player. A blob by their name indicates that"
  2662.    Data "   they won the last match. The length of the previous match is also shown."
  2663.    Data ""
  2664.    Data ""
  2665.    Data "$4The automatic defence system:"
  2666.    Data ""
  2667.    Data " At the beginning of every match, each player gets the chance to look around"
  2668.    Data " the level and to buy defensive items (shields, parachutes, etc.). At this"
  2669.    Data " stage, you can $2not$7 fire. To continue, click on the white tick icon, which"
  2670.    Data " replaces the usual fire button. When everyone has had a chance to do this"
  2671.    Data " (including the computer players), the battle will commence in ernest..."
  2672.    Data "END"
  2673.    
  2674.    ' Control code reference:  
  2675.    ' $1=Red   
  2676.    ' $2=Green 
  2677.    ' $3=Blue
  2678.    ' $4=Yellow
  2679.    ' $5=Magenta 
  2680.    ' $6=Cyan
  2681.    ' $7=White 
  2682. End Proc
  2683.  
  2684. Procedure _DOINSTRUCTIONS_INTERFACE
  2685.    Restore _INTERFACEDAT
  2686.    Read N$
  2687.    While N$<>"END"
  2688.       _LINES$(_NUMLINES)=N$
  2689.       Inc _NUMLINES
  2690.       Read N$
  2691.    Wend 
  2692.    For Z=_NUMLINES To _NUMLINES+21
  2693.       _LINES$(Z)=""
  2694.    Next 
  2695.    _DOINSTRUCTIONS_WRITEALL
  2696.    _DOINSTRUCTIONS_DRAW
  2697.    _DOINSTRUCTIONS_UPDATE
  2698.    Screen 2
  2699.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  2700.    Repeat 
  2701.       _DOINSTRUCTIONS_STUFF
  2702.       M=Param
  2703.       If M=2
  2704.          If _NUMLINES-_OFLINES>22
  2705.             _DOINSTRUCTIONS_SCROLLDOWN
  2706.             _DOINSTRUCTIONS_DRAW
  2707.             _DOINSTRUCTIONS_UPDATE
  2708.          End If 
  2709.       End If 
  2710.       If M=3
  2711.          If _OFLINES>0
  2712.             _DOINSTRUCTIONS_SCROLLUP
  2713.             _DOINSTRUCTIONS_DRAW
  2714.             _DOINSTRUCTIONS_UPDATE
  2715.          End If 
  2716.       End If 
  2717.    Until M=1
  2718.    
  2719.    _INTERFACEDAT:
  2720.    Data "$4Controlling the game:"
  2721.    Data ""
  2722.    Data " Various information is given about the game's status. This includes the edge"
  2723.    Data " type (concrete, bouncy, springy or wrap-around), the wind direction and"
  2724.    Data " speed, how much health the player has, their shield strength and the amount"
  2725.    Data " of money they currently possess. This information cannot be directly altered."
  2726.    Data " The following gadgets can be changed:"
  2727.    Data ""
  2728.    Data "  $1#$7The angle of the turret. Upon clicking on it you can move the mouse"
  2729.    Data "   left and right to rotate the turret anticlockwise and clockwise. Click"
  2730.    Data "   again when finished. $2Keyboard equivalent: left and right arrow keys."
  2731.    Data "  $1#$7Clicking on the power allows this to altered in similar way. $2Keyboard"
  2732.    Data "   $2equivalent: up and down arrow keys."
  2733.    Data "  $1#$7You can change the current weapon, buy shields and parachutes in the"
  2734.    Data "   shop. Click on the 'shop' icon to go to the shop. (See below for more"
  2735.    Data "   detailed information on the shop.)"
  2736.    Data "  $1#$7Click on the icon with the drawing of a rocket being launched to take"
  2737.    Data "   your shot. Note that you cannot shoot on your first go; this is to give"
  2738.    Data "   all the players a chance to buy shields and parachutes before they get shot"
  2739.    Data "   at. If this is the case then the icon will appear as a white tick instead"
  2740.    Data "   of a rocket being launched. $2Keyboard equivalent: Return or space to"
  2741.    Data "   $2shoot/continue."
  2742.    Data "  $1#$7Clicking on the 'map' icon enables and disables the map. $2Keyboard"
  2743.    Data "   $2equivalent: Press M to toggle the map."
  2744.    Data "  $1#$7Clicking on the arrows near the centre of the status bar allows you to"
  2745.    Data "   scroll around your tank. At any time you may press the right mouse button"
  2746.    Data "   to directly control the view. Clicking on the Frontal Assault logo will"
  2747.    Data "   recentre the view on your tank. $2Keyboard equivalents: 8,4,6 and 2 to scroll"
  2748.    Data "   $2around your tank, and 5 to centre on your tank (numeric keypad only)."
  2749.    Data ""
  2750.    Data " At any time, you can press the escape key to return to the title screen."
  2751.    Data ""
  2752.    Data ""
  2753.    Data "$4The Shop:"
  2754.    Data ""
  2755.    Data " The main bulk of the shop is taken up with a list of all the weapons and"
  2756.    Data " items in the game. Those you can afford are written in white, and those you"
  2757.    Data " can't afford are written in grey. You can scroll this list left and right"
  2758.    Data " using the arrows in the top-right hand corner of the shop. Clicking on a"
  2759.    Data " defence item (indicated by a lighter background) will purchase it, provided"
  2760.    Data " that you can afford it (how much money you have and how much the item costs"
  2761.    Data " is shown to the right of the display)."
  2762.    Data ""
  2763.    Data " Also included in the list are all the weapons in the game. By clicking on one"
  2764.    Data " you will choose it as your current weapon, provided you can afford it."
  2765.    Data " Weapons are indicated by a darker background. Note that to the right of the"
  2766.    Data " display is a brief description of the item the cursor is currently over,"
  2767.    Data " along with its price. When you've finished purchasing items, click on the"
  2768.    Data " 'done' icon to return to the main in-game control screen."
  2769.    Data "END"
  2770.    
  2771.    ' Control code reference:  
  2772.    ' $1=Red   
  2773.    ' $2=Green 
  2774.    ' $3=Blue
  2775.    ' $4=Yellow
  2776.    ' $5=Magenta 
  2777.    ' $6=Cyan
  2778.    ' $7=White 
  2779. End Proc
  2780.  
  2781. Procedure _DOINSTRUCTIONS_WEAPONS
  2782.    Restore _WEAPONSDAT
  2783.    Read N$
  2784.    While N$<>"END"
  2785.       _LINES$(_NUMLINES)=N$
  2786.       Inc _NUMLINES
  2787.       Read N$
  2788.    Wend 
  2789.    For Z=_NUMLINES To _NUMLINES+21
  2790.       _LINES$(Z)=""
  2791.    Next 
  2792.    _DOINSTRUCTIONS_WRITEALL
  2793.    _DOINSTRUCTIONS_DRAW
  2794.    _DOINSTRUCTIONS_UPDATE
  2795.    Screen 2
  2796.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  2797.    Repeat 
  2798.       _DOINSTRUCTIONS_STUFF
  2799.       M=Param
  2800.       If M=2
  2801.          If _NUMLINES-_OFLINES>22
  2802.             _DOINSTRUCTIONS_SCROLLDOWN
  2803.             _DOINSTRUCTIONS_DRAW
  2804.             _DOINSTRUCTIONS_UPDATE
  2805.          End If 
  2806.       End If 
  2807.       If M=3
  2808.          If _OFLINES>0
  2809.             _DOINSTRUCTIONS_SCROLLUP
  2810.             _DOINSTRUCTIONS_DRAW
  2811.             _DOINSTRUCTIONS_UPDATE
  2812.          End If 
  2813.       End If 
  2814.    Until M=1
  2815.    
  2816.    _WEAPONSDAT:
  2817.    Data "$4Offence:"
  2818.    Data ""
  2819.    Data " Each of the following items can be selected in the shop:"
  2820.    Data ""
  2821.    Data " $5Cost $7@ $5Description"
  2822.    Data " -----+-----------------------------------------------------------------------"
  2823.    Data "    $20 $7@ $6Baby missile"
  2824.    Data "      @  $4not very powerful - but it's free"
  2825.    Data "      @"
  2826.    Data "   $210 $7@ $6Riot charge"
  2827.    Data "      @  $4same physical size as a missile, but does not do any damage to tanks"
  2828.    Data "      @"
  2829.    Data "   $220 $7@ $6Missile"
  2830.    Data "      @  $4more powerful that baby missile"
  2831.    Data "      @"
  2832.    Data "   $220 $7@ $6Heavy riot charge"
  2833.    Data "      @  $4same physical size as a nuke, but does not do any damage to tanks"
  2834.    Data "      @"
  2835.    Data "   $225 $7@ $6Roller"
  2836.    Data "      @  $4rolls along the ground until it either hits another player or it"
  2837.    Data "      @  $4encounters an upward slope. When either of these occurs, it detonates"
  2838.    Data "      @  $4like a baby missile"
  2839.    Data "      @"
  2840.    Data "   $230 $7@ $6Dirt spray"
  2841.    Data "      @  $4a stream of mud is launched from your tank in the direction that the"
  2842.    Data "      @  $4turret points"
  2843.    Data "      @"
  2844.    Data "   $235 $7@ $6Tunneller"
  2845.    Data "      @  $4as powerful as a missile, but does not explode when it hits the"
  2846.    Data "      @  $4ground. Instead, it continues until it re-emerges, at which point it"
  2847.    Data "      @  $4detonates"
  2848.    Data "      @"
  2849.    Data "   $240 $7@ $6Mud slinger"
  2850.    Data "      @  $4on impact, a column of mud is launched vertically"
  2851.    Data "      @"
  2852.    Data "   $250 $7@ $6Homing missile"
  2853.    Data "      @  $4same as baby missile, except when passing over an opponent. When this"
  2854.    Data "      @  $4happens, it attempts to stop horizontally, and fall on them"
  2855.    Data "      @"
  2856.    Data "   $250 $7@ $6Bouncer"
  2857.    Data "      @  $4bounces on first impact, detonates as missile"
  2858.    Data "      @"
  2859.    Data "   $250 $7@ $6Heavy roller"
  2860.    Data "      @  $4rolls along the ground until it either hits another player or it"
  2861.    Data "      @  $4encounters an upward slope. When either of these occurs, it detonates"
  2862.    Data "      @  $4like a missile"
  2863.    Data "      @"
  2864.    Data "   $250 $7@ $6Flood"
  2865.    Data "      @  $4liquid floods from point of impact. When a set amount has been"
  2866.    Data "      @  $4released, it solidifies into land"
  2867.    Data "      @"
  2868.    Data "   $260 $7@ $6Triple missile"
  2869.    Data "      @  $4fires three missiles; one at the angle the turret is at, one at 10"
  2870.    Data "      @  $4degrees below, and one at 10 degrees above"
  2871.    Data "      @"
  2872.    Data "   $260 $7@ $6Psycho"
  2873.    Data "      @  $4fires 5 missiles; one to the left, one to the right, one upwards, one"
  2874.    Data "      @  $4left-up and the final one right-up. Unaffected by the turret's angle"
  2875.    Data "      @"
  2876.    Data "   $275 $7@ $6Large flood"
  2877.    Data "      @  $4as with flood, but with a greater amount of liquid"
  2878.    Data "      @"
  2879.    Data "   $280 $7@ $6Mega riot charge"
  2880.    Data "      @  $4for first second, acts like a missile. Then, it detonates into 5"
  2881.    Data "      @  $4heavy riot charges"
  2882.    Data "      @"
  2883.    Data "  $2100 $7@ $6Pile driver"
  2884.    Data "      @  $4at point of impact, drill a large pit into the ground"
  2885.    Data "      @"
  2886.    Data "  $2100 $7@ $6Baby nuke"
  2887.    Data "      @  $4same physical size as a missile, but with double the hit radius"
  2888.    Data "      @"
  2889.    Data "  $2125 $7@ $6Cluster bomb (5)"
  2890.    Data "      @  $4for first second, acts as missile. Then, detonates into 5 baby"
  2891.    Data "      @  $4missiles"
  2892.    Data "      @"
  2893.    Data "  $2125 $7@ $6Mega tunneller"
  2894.    Data "      @  $4as tunneller, but with baby nukes instead"
  2895.    Data "      @"
  2896.    Data "  $2125 $7@ $6Mountain mover"
  2897.    Data "      @  $4for first second, acts like a missile. Then, it detonates into 10"
  2898.    Data "      @  $4heavy riot charges"
  2899.    Data "      @"
  2900.    Data "  $2140 $7@ $6Mega roller"
  2901.    Data "      @  $4rolls along the ground until it either hits another player or it"
  2902.    Data "      @  $4encounters an upward slope. When either of these occurs, it detonates"
  2903.    Data "      @  $4like a baby nuke"
  2904.    Data "      @"
  2905.    Data "  $2150 $7@ $6Transporter"
  2906.    Data "      @  $4your tank is transported to the point of impact"
  2907.    Data "      @"
  2908.    Data "  $2150 $7@ $6Burrower"
  2909.    Data "      @  $4when it hits the ground, detonates like a heavy riot charge. But, it"
  2910.    Data "      @  $4then continues on its original path. This process is repeated a total"
  2911.    Data "      @  $4of 6 times"
  2912.    Data "      @"
  2913.    Data "  $2150 $7@ $6Mega bouncer"
  2914.    Data "      @  $4bounces on first impact, detonates as baby nuke"
  2915.    Data "      @"
  2916.    Data "  $2150 $7@ $6Random"
  2917.    Data "      @  $4picks a random weapon; whatever is chosen, you only get charged 150Cr"
  2918.    Data "      @"
  2919.    Data "  $2200 $7@ $6Nuke"
  2920.    Data "      @  $4twice the power and size of a baby nuke"
  2921.    Data "      @"
  2922.    Data "  $2200 $7@ $6Cluster bomb (10)"
  2923.    Data "      @  $4for first second, acts as missile. Then, detonates into 10 baby"
  2924.    Data "      @  $4missiles"
  2925.    Data "      @"
  2926.    Data "  $2200 $7@ $6Fountain"
  2927.    Data "      @  $4at point of impact, detonates into 8 baby missiles"
  2928.    Data "      @"
  2929.    Data "  $2200 $7@ $6Leapfrog"
  2930.    Data "      @  $4bounces three times, leaving a missile-sized detonation at each point"
  2931.    Data "      @"
  2932.    Data "  $2250 $7@ $6Lightning"
  2933.    Data "      @  $4causes a lightning bolt strike at the point of impact"
  2934.    Data "      @"
  2935.    Data "  $2350 $7@ $6Laser"
  2936.    Data "      @  $4shoots a laser beam from the tank's turret, which is capable of"
  2937.    Data "      @  $4cutting through the ground and is very bad for any tanks it hits"
  2938.    Data "      @"
  2939.    Data "  $2400 $7@ $6Napalm"
  2940.    Data "      @  $4hot napalm floods from point of impact. Damages tanks, then vanishes"
  2941.    Data "      @"
  2942.    Data "  $2400 $7@ $6Mega nuke"
  2943.    Data "      @  $4twice the power and size of a nuke"
  2944.    Data "      @"
  2945.    Data "  $2400 $7@ $6Heavy fountain"
  2946.    Data "      @  $4at point of impact, detonates into 10 missiles"
  2947.    Data "      @"
  2948.    Data "  $2650 $7@ $6Splitter"
  2949.    Data "      @  $4at point of impact, spreads five baby nukes horizontally"
  2950.    Data "      @"
  2951.    Data "  $2750 $7@ $6Death's head"
  2952.    Data "      @  $4for first second, acts as missile. Then, detonates into 5 baby nukes"
  2953.    Data "      @"
  2954.    Data "  $2750 $7@ $6Large napalm"
  2955.    Data "      @  $4as napalm, but more of it"
  2956.    Data "      @"
  2957.    Data " $21000 $7@ $6Mega death's head"
  2958.    Data "      @  $4for first second, acts as missile. Then, detonates into 5 nukes"
  2959.    Data "      @"
  2960.    Data " $21000 $7@ $6Power driver"
  2961.    Data "      @  $4drives a chain of 6 nukes along the current trajectory"
  2962.    Data "      @"
  2963.    Data " $21000 $7@ $6Mega fountain"
  2964.    Data "      @  $4at point of impact, detonates into 10 baby nukes"
  2965.    Data "      @"
  2966.    Data " $21200 $7@ $6Mega splitter"
  2967.    Data "      @  $4as splitter, but with nukes instead"
  2968.    Data "      @"
  2969.    Data " $21250 $7@ $6Electrify ground"
  2970.    Data "      @  $4damages everyone visible on screen at the moment of impact"
  2971.    Data "      @"
  2972.    Data " $21800 $7@ $6Devastator"
  2973.    Data "      @  $4for first second, acts as missile. Then, detonates into 5 mega nukes"
  2974.    Data "      @"
  2975.    Data " $22500 $7@ $6End of the world"
  2976.    Data "      @  $4for first second, acts as missile. Then, detonates into 10 mega nukes"
  2977.    Data "      @"
  2978.    Data ""
  2979.    Data ""
  2980.    Data "$4Defence:"
  2981.    Data " "
  2982.    Data " Each of the following items can be brought in the shop:"
  2983.    Data ""
  2984.    Data " $5Cost $7@ $5Description"
  2985.    Data " -----+-----------------------------------------------------------------------"
  2986.    Data "   $250 $7@ $61 parachute"
  2987.    Data "      @  $4protects you from falling"
  2988.    Data "      @"
  2989.    Data "  $2100 $7@ $6Deflector shield"
  2990.    Data "      @  $4any shots above you will be deflected upwards. Also offers limited"
  2991.    Data "      @  $4protection for a shot even when it does hit"
  2992.    Data "      @"
  2993.    Data "  $2200 $7@ $6Light shield"
  2994.    Data "      @  $4does not deflect shots at all, but offers considerably more"
  2995.    Data "      @  $4protection against shots that do hit"
  2996.    Data "      @"
  2997.    Data "  $2300 $7@ $6Heavy shield"
  2998.    Data "      @  $4same as light shield, but offers even more protection"
  2999.    Data "      @"
  3000.    Data "    $20 $7@ $6Surrender"
  3001.    Data "      @  $4allows you to die without the disadvantage of anyone else gaining"
  3002.    Data "      @  $4money because they killed you"
  3003.    Data "END"
  3004.    
  3005.    ' Control code reference:  
  3006.    ' $1=Red   
  3007.    ' $2=Green 
  3008.    ' $3=Blue
  3009.    ' $4=Yellow
  3010.    ' $5=Magenta 
  3011.    ' $6=Cyan
  3012.    ' $7=White 
  3013. End Proc
  3014.  
  3015. Procedure _DOINSTRUCTIONS_CONFIGURING
  3016.    Restore _CONFIGURINGDAT
  3017.    Read N$
  3018.    While N$<>"END"
  3019.       _LINES$(_NUMLINES)=N$
  3020.       Inc _NUMLINES
  3021.       Read N$
  3022.    Wend 
  3023.    For Z=_NUMLINES To _NUMLINES+21
  3024.       _LINES$(Z)=""
  3025.    Next 
  3026.    _DOINSTRUCTIONS_WRITEALL
  3027.    _DOINSTRUCTIONS_DRAW
  3028.    _DOINSTRUCTIONS_UPDATE
  3029.    Screen 2
  3030.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  3031.    Repeat 
  3032.       _DOINSTRUCTIONS_STUFF
  3033.       M=Param
  3034.       If M=2
  3035.          If _NUMLINES-_OFLINES>22
  3036.             _DOINSTRUCTIONS_SCROLLDOWN
  3037.             _DOINSTRUCTIONS_DRAW
  3038.             _DOINSTRUCTIONS_UPDATE
  3039.          End If 
  3040.       End If 
  3041.       If M=3
  3042.          If _OFLINES>0
  3043.             _DOINSTRUCTIONS_SCROLLUP
  3044.             _DOINSTRUCTIONS_DRAW
  3045.             _DOINSTRUCTIONS_UPDATE
  3046.          End If 
  3047.       End If 
  3048.    Until M=1
  3049.    
  3050.    _CONFIGURINGDAT:
  3051.    Data "$4Configuring the game:"
  3052.    Data ""
  3053.    Data " On the title screen, you will see five main options. These are listed below:"
  3054.    Data ""
  3055.    Data "  $1#$2Instructions$7 - takes you here"
  3056.    Data "  $1#$2Options$7 - contains several miscellaneous options"
  3057.    Data "  $1#$2Setup$7 - allows you to change the names of each of the seven players, as"
  3058.    Data "           well as altering whether they are human or computer controlled"
  3059.    Data "  $1#$2Play!$7 - starts the game"
  3060.    Data "  $1#$2Quit$7 - exits the game and saves the current configuration to disk"
  3061.    Data ""
  3062.    Data ""
  3063.    Data "$4Options:"
  3064.    Data ""
  3065.    Data " The options screen contains the following information. It can be changed by"
  3066.    Data " clicking on it with the left or right mouse buttons."
  3067.    Data ""
  3068.    Data "  $1#$2Number of rounds$7 - sets the number of rounds that will be played (1-99)"
  3069.    Data "  $1#$2Gravity$7 - either Moon (low), Earth (medium) or Jupiter (high)."
  3070.    Data "  $1#$2Start cash$7 - how much money each player starts with (between 0-5000)."
  3071.    Data "  $1#$2Interest$7 - the percent interest rate each player's cash earns at the end"
  3072.    Data "              of each round."
  3073.    Data "  $1#$2In-game audio$7 - either sound FX or music."
  3074.    Data "  $1#$2Cash rewards$7 - changes the 'generosity' of the game (see the $5introduction$7)"
  3075.    Data "  $1#$2CPU IQ$7 - sets the computer players' intelligence (between 25-300)."
  3076.    Data "  $1#$2Wind strength$7 - sets, surprisingly enough, the wind strength (either"
  3077.    Data "                   off, low or high)."
  3078.    Data "  $1#$2Turbo mode$7 - speeds up the game, at the expense of appearance. Can be"
  3079.    Data "                set to: 'off', 'on', 'comp only' or 'when all comp'. 'When"
  3080.    Data "                all comp' means that it will be enabled only when there are"
  3081.    Data "                just computer players remaining. 'comp only' means that the"
  3082.    Data "                game will be accelerated only during a computer player's go."
  3083.    Data "  $1#$2Training mode$7 - enables an additional pair of crosshairs which show"
  3084.    Data "                   exactly where the current shot will hit. Can be either"
  3085.    Data "                   on or off."
  3086.    Data "  $1#$2Weapon select$7 - either dumb, average or smart. Sets how good the CPU"
  3087.    Data "                   players are at choosing their weapons."
  3088.    Data "  $1#$2Level mode$7 - Can be changed between two states: Generate and bitmap."
  3089.    Data "                Changing this alters the options available to you, as shown"
  3090.    Data "                below:"
  3091.    Data "                 $1a)$5 Generate: $1i) $6Dirt drop $7- either ugly, pretty, medium or"
  3092.    Data "                                             off. This sets the routine"
  3093.    Data "                                             used to calculate the dropping"
  3094.    Data "                                             of the dirt. Ugly is the"
  3095.    Data "                                             fastest, pretty is the slowest"
  3096.    Data "                                             and 'off' allows tunnelling."
  3097.    Data "                              $1ii) $6Mountains$7 - can either be on or off. If it"
  3098.    Data "                                              is on, a 'mountains' level may"
  3099.    Data "                                              be generated."
  3100.    Data "                              $1iii) $6City$7 - can either be on or off. If it is"
  3101.    Data "                                          on, a 'city' level may be"
  3102.    Data "                                          generated."
  3103.    Data "                              $1iv)$6 Wastelands$7 - can either be on or off. If it"
  3104.    Data "                                               is on, a 'wastelands' level"
  3105.    Data "                                               may be generated."
  3106.    Data "                              $1v) $6Ice$7 - can either be on or off. If it is on,"
  3107.    Data "                                       an 'ice' level may be generated."
  3108.    Data "                              $1vi) $6Desert $7- can either be on or off. If it is"
  3109.    Data "                                           on, a 'desert' level may be"
  3110.    Data "                                           generated."
  3111.    Data "                              $1vii) $6Alien$7 - can either be on or off. If it is"
  3112.    Data "                                           on, an 'alien' level may be"
  3113.    Data "                                           generated."
  3114.    Data "                 $1b) $5Bitmap: $1i) $6Round $7- Sets the number of the round you are"
  3115.    Data "                                       currently editing."
  3116.    Data "                            $1ii) $6Map to use $7- Allows you to change the bitmap"
  3117.    Data "                                             that will be used on the round"
  3118.    Data "                                             shown above."
  3119.    Data "                            $1iii) $6Randomize$7 - Rearranges the assignments of"
  3120.    Data "                                             maps into a new, random order."
  3121.    Data ""
  3122.    Data ""
  3123.    Data "$4Setup:"
  3124.    Data ""
  3125.    Data " For each of the seven players, the following information is displayed:"
  3126.    Data ""
  3127.    Data "  $1#$7A filled square of that tank's colour."
  3128.    Data "  $1#$7Their name. Clicking on it allows you to edit it using the keyboard."
  3129.    Data "   Press RETURN when you have finished."
  3130.    Data "  $1#$7Their control method. Either 'brain', 'CPU' or 'off'. Note that at least"
  3131.    Data "   two players must be enabled in order for the game to function correctly."
  3132.    Data "END"
  3133.    
  3134.    ' Control code reference:  
  3135.    ' $1=Red   
  3136.    ' $2=Green 
  3137.    ' $3=Blue
  3138.    ' $4=Yellow
  3139.    ' $5=Magenta 
  3140.    ' $6=Cyan
  3141.    ' $7=White 
  3142. End Proc
  3143.  
  3144. Procedure _DOINSTRUCTIONS_CUSTOMISING
  3145.    Restore _CUSTOMISINGDAT
  3146.    Read N$
  3147.    While N$<>"END"
  3148.       _LINES$(_NUMLINES)=N$
  3149.       Inc _NUMLINES
  3150.       Read N$
  3151.    Wend 
  3152.    For Z=_NUMLINES To _NUMLINES+21
  3153.       _LINES$(Z)=""
  3154.    Next 
  3155.    _DOINSTRUCTIONS_WRITEALL
  3156.    _DOINSTRUCTIONS_DRAW
  3157.    _DOINSTRUCTIONS_UPDATE
  3158.    Screen 2
  3159.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  3160.    Repeat 
  3161.       _DOINSTRUCTIONS_STUFF
  3162.       M=Param
  3163.       If M=2
  3164.          If _NUMLINES-_OFLINES>22
  3165.             _DOINSTRUCTIONS_SCROLLDOWN
  3166.             _DOINSTRUCTIONS_DRAW
  3167.             _DOINSTRUCTIONS_UPDATE
  3168.          End If 
  3169.       End If 
  3170.       If M=3
  3171.          If _OFLINES>0
  3172.             _DOINSTRUCTIONS_SCROLLUP
  3173.             _DOINSTRUCTIONS_DRAW
  3174.             _DOINSTRUCTIONS_UPDATE
  3175.          End If 
  3176.       End If 
  3177.    Until M=1
  3178.    
  3179.    _CUSTOMISINGDAT:
  3180.    Data "$4Designing your own levels:"
  3181.    Data ""
  3182.    Data " $1#$7Draw your level on an 8 colour 960x512 or 960x350 screen and save it in"
  3183.    Data "  IFF format. Almost any paint package can do this. Colour zero will be"
  3184.    Data "  automatically treated as 'air'. That is, the shells will pass through it."
  3185.    Data "  Try to keep colour 0 reasonably dark, otherwise it is hard to see the shells,"
  3186.    Data "  which are always drawn in white. All other colours count as solid."
  3187.    Data " $1#$7Copy your level (with the .MAP extension) to the 'Levels' subdirectory of"
  3188.    Data "  your Frontal Assault drawer. Run Frontal Assault and, hey presto, your level"
  3189.    Data "  is now selectable from the options screen when in 'Bitmap' mode."
  3190.    Data ""
  3191.    Data " $5NB:$7 Worms levels can easily be imported into Frontal Assault. Simply re-save"
  3192.    Data "     adding the '.MAP' extension. In fact, this is how I got most of the"
  3193.    Data "     levels for the game! (many thanks to their original authors)"
  3194.    Data ""
  3195.    Data ""
  3196.    Data "$4Editing the talk files:"
  3197.    Data ""
  3198.    Data " When a player shoots or dies, they 'say' something in the form of a message"
  3199.    Data " that pops up at the bottom of the screen. If you look in the sub-directory"
  3200.    Data " 'Talk', you will find two text files named 'Die.TXT' and 'Shoot.TXT'. Editing"
  3201.    Data " these allows you to change the comments that are made by the tanks in the"
  3202.    Data " associated situations."
  3203.    Data ""
  3204.    Data ""
  3205.    Data "$4Adding and removing tunes from the jukebox:"
  3206.    Data ""
  3207.    Data " The tunes used by the jukebox are stored in the sub-directory 'Music' as"
  3208.    Data " Soundtracker modules. To change the tunes used by the game, simply add and"
  3209.    Data " remove files from this directory. Note that the MOD player used by the game"
  3210.    Data " isn't perfect and can't play some tunes, so some experimentation may be"
  3211.    Data " required. Also, I recommend you try to limit the modules you use to less than"
  3212.    Data " 500K to guard against running out of chip RAM."
  3213.    Data "END"
  3214.    
  3215.    ' Control code reference:  
  3216.    ' $1=Red   
  3217.    ' $2=Green 
  3218.    ' $3=Blue
  3219.    ' $4=Yellow
  3220.    ' $5=Magenta 
  3221.    ' $6=Cyan
  3222.    ' $7=White 
  3223. End Proc
  3224.  
  3225. Procedure _DOINSTRUCTIONS_ABOUT
  3226.    Restore _ABOUTDAT
  3227.    Read N$
  3228.    While N$<>"END"
  3229.       _LINES$(_NUMLINES)=N$
  3230.       Inc _NUMLINES
  3231.       Read N$
  3232.    Wend 
  3233.    For Z=_NUMLINES To _NUMLINES+21
  3234.       _LINES$(Z)=""
  3235.    Next 
  3236.    _DOINSTRUCTIONS_WRITEALL
  3237.    _DOINSTRUCTIONS_DRAW
  3238.    _DOINSTRUCTIONS_UPDATE
  3239.    Screen 2
  3240.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  3241.    Repeat 
  3242.       _DOINSTRUCTIONS_STUFF
  3243.       M=Param
  3244.       If M=2
  3245.          If _NUMLINES-_OFLINES>22
  3246.             _DOINSTRUCTIONS_SCROLLDOWN
  3247.             _DOINSTRUCTIONS_DRAW
  3248.             _DOINSTRUCTIONS_UPDATE
  3249.          End If 
  3250.       End If 
  3251.       If M=3
  3252.          If _OFLINES>0
  3253.             _DOINSTRUCTIONS_SCROLLUP
  3254.             _DOINSTRUCTIONS_DRAW
  3255.             _DOINSTRUCTIONS_UPDATE
  3256.          End If 
  3257.       End If 
  3258.    Until M=1
  3259.    
  3260.    _ABOUTDAT:
  3261.    Data "$4Credits:"
  3262.    Data ""
  3263.    Data " $2Code               $7  James Daniels"
  3264.    Data ""
  3265.    Data " $2Idea               $7  from Scorched Earth/Tanks"
  3266.    Data ""
  3267.    Data " $2Graphics           $7  James Daniels"
  3268.    Data ""
  3269.    Data " $2AmigaGuide         $7  Nathan J. Harmsworth"
  3270.    Data ""
  3271.    Data " $2Sound FX           $7  James Daniels"
  3272.    Data ""
  3273.    Data " $2Music              $7  Nuke of Anarchy"
  3274.    Data "                      Nhp of the Silents"
  3275.    Data "                      Abhoth/Absolute"
  3276.    Data "                      Dean/Cyberiad"
  3277.    Data "                      Technix of Anathema"
  3278.    Data "                      The Prodigy/Uranium"
  3279.    Data "                      Jester of Sanity"
  3280.    Data "                      The Anchoret"
  3281.    Data "                      Syntex of Stone Arts"
  3282.    Data "                      Tip of dc"
  3283.    Data "                      Mantronix of flt"
  3284.    Data "                      Arios+Feyd/Delight"
  3285.    Data "                      Feekzoid"
  3286.    Data "                      c.a.t. of essence"
  3287.    Data "                      Doz, Ivan and Maria"
  3288.    Data ""
  3289.    Data " $2CD's used          $7  Sounds Terrific"
  3290.    Data "                      AGA experience volume 2"
  3291.    Data ""
  3292.    Data " $2Level designers    $7  James Daniels"
  3293.    Data "                      Chris Daniels"
  3294.    Data "                      Ian Young"
  3295.    Data "                      Havoc"
  3296.    Data "                      Adam Jasiutowicz"
  3297.    Data "                      Philip Kaulfuss"
  3298.    Data "                      P.J. Dodd"
  3299.    Data "                      Anthony Potanitis"
  3300.    Data "                      Mischa Neubauer"
  3301.    Data "                      MKL"
  3302.    Data "                      David Eady"
  3303.    Data "                      Kevin Rochowski"
  3304.    Data "                      AJT"
  3305.    Data "                      Glen Watts"
  3306.    Data "                      P.H. Ellis"
  3307.    Data "                      Andy Till"
  3308.    Data "                      Several anonymous designers"
  3309.    Data ""
  3310.    Data " $2Icons              $7  Martin Huttonloher"
  3311.    Data "                      Trevor Morris"
  3312.    Data ""
  3313.    Data " $2Playtesters        $7  James Daniels"
  3314.    Data " $2(and           $7      Bernard L'Allier"
  3315.    Data " $2   additional     $7   Chris Daniels"
  3316.    Data "  $2         ideas)   $7  Chris Marks"
  3317.    Data "                      Jonathan Hughes"
  3318.    Data "                      Matthew Agar"
  3319.    Data "                      Paul L'Allier"
  3320.    Data "                      Henry Styles"
  3321.    Data "                      Alex Smith"
  3322.    Data "                      Richard Rothery"
  3323.    Data "                      Roger Wiggett"
  3324.    Data "                      Richard Field"
  3325.    Data "                      Toby Higson"
  3326.    Data "                      Tim Spencer"
  3327.    Data "                      Max Robinson"
  3328.    Data "                      Becker Jacques"
  3329.    Data "                      Keith Smith"
  3330.    Data "                      Eike Lang"
  3331.    Data "                      Gerald Yuen"
  3332.    Data "                      Daniel Schmitt"
  3333.    Data "                      Den of Iniquity"
  3334.    Data "                      Greg Tallent"
  3335.    Data "                      Nathan J. Harmsworth"
  3336.    Data "                      Julian Simpson"
  3337.    Data "                      Chris Spurway"
  3338.    Data ""
  3339.    Data " In total, almost 50 people have contributed to this game!"
  3340.    Data ""
  3341.    Data ""
  3342.    Data " $4VISIT $7APEX DESIGNS' $4WEB SITE, THE HOME OF FRONTAL ASSAULT AND MANY OTHER"
  3343.    Data " $4GREAT GAMES! THE URL IS: "
  3344.    Data ""
  3345.    Data " $6http://welcome.to/apex.designs/"
  3346.    Data ""
  3347.    Data ""
  3348.    Data " $4FOR QUERIES/REQUESTS CONTACT THE AUTHOR AT: "
  3349.    Data ""
  3350.    Data " $2E-Mail:$7  J.R.Daniels&Warwick.ac.uk           $1(term time only)"
  3351.    Data ""
  3352.    Data " $2Post:$7    James Daniels,"
  3353.    Data "          54 Knowles Avenue,"
  3354.    Data "          Crowthorne,"
  3355.    Data "          Berkshire, "
  3356.    Data "          RG45 6DU."
  3357.    Data "END"
  3358.    
  3359.    ' Control code reference:  
  3360.    ' $1=Red   
  3361.    ' $2=Green 
  3362.    ' $3=Blue
  3363.    ' $4=Yellow
  3364.    ' $5=Magenta 
  3365.    ' $6=Cyan
  3366.    ' $7=White 
  3367. End Proc
  3368.  
  3369. Procedure _DOINSTRUCTIONS_STATISTICS
  3370.    T=_TOTAL_PLAYTIME/50
  3371.    _HOURS=T/3600
  3372.    _MINS=(T-(_HOURS*3600))/60
  3373.    _SECS=T-(_HOURS*3600)-(_MINS*60)
  3374.    _TIME$=Str$(_HOURS)+" hour(s),"+Str$(_MINS)+" min(s) and"+Str$(_SECS)+" sec(s)."
  3375.    Restore _STATISTICSDAT
  3376.    Read N$
  3377.    While N$<>"END"
  3378.       _LINES$(_NUMLINES)=N$
  3379.       Inc _NUMLINES
  3380.       Read N$
  3381.    Wend 
  3382.    _FLIP=0
  3383.    For Z=0 To _NUMWEAP-1
  3384.       _FLIP=1-_FLIP
  3385.       N$=_WEAP$(Z)
  3386.       While Len(N$)<30
  3387.          N$=N$+" "
  3388.       Wend 
  3389.       If _FLIP=0
  3390.          _LINES$(_NUMLINES)=" $5"+N$+Str$(_WEAPUSED(Z))
  3391.       Else 
  3392.          _LINES$(_NUMLINES)=" $6"+N$+Str$(_WEAPUSED(Z))
  3393.       End If 
  3394.       Inc _NUMLINES
  3395.    Next 
  3396.    For Z=_NUMLINES To _NUMLINES+21
  3397.       _LINES$(Z)=""
  3398.    Next 
  3399.    _DOINSTRUCTIONS_WRITEALL
  3400.    _DOINSTRUCTIONS_DRAW
  3401.    _DOINSTRUCTIONS_UPDATE
  3402.    Screen 2
  3403.    Palette ,,,,,,,,,,,,,,,,$0,$F00,$F0,$F,$FF0,$F0F,$FF,$FFF
  3404.    Repeat 
  3405.       _DOINSTRUCTIONS_STUFF
  3406.       M=Param
  3407.       If M=2
  3408.          If _NUMLINES-_OFLINES>22
  3409.             _DOINSTRUCTIONS_SCROLLDOWN
  3410.             _DOINSTRUCTIONS_DRAW
  3411.             _DOINSTRUCTIONS_UPDATE
  3412.          End If 
  3413.       End If 
  3414.       If M=3
  3415.          If _OFLINES>0
  3416.             _DOINSTRUCTIONS_SCROLLUP
  3417.             _DOINSTRUCTIONS_DRAW
  3418.             _DOINSTRUCTIONS_UPDATE
  3419.          End If 
  3420.       End If 
  3421.    Until M=1
  3422.    
  3423.    _STATISTICSDAT:
  3424.    Data "$4About the game: $7("+_VER$+")"
  3425.    Data ""
  3426.    Data " $3#$7It has over 210K of source code. (almost 8000 lines!)"
  3427.    Data " $3#$7It has almost 3.5Mb of sound."
  3428.    Data " $3#$7It has over 2.5Mb of graphics."
  3429.    Data " $3#$7There are currently"+Str$(_NUMWEAP)+" different weapons."
  3430.    Data " $3#$7Three years in the making!"
  3431.    Data " $3#$7It was written using AMOS Professional, DPaint IV AGA, Powerpacker v3,"
  3432.    Data "  PPaint v7.1 and OctaMED v5."
  3433.    Data " $3#$7It was written on a 18MB A1200 040/25 with a total of 6.1Gb hard disk"
  3434.    Data "  space and a double speed CD-ROM drive."
  3435.    Data ""
  3436.    Data ""
  3437.    Data "$4Statistics:"
  3438.    Data ""
  3439.    Data " $2Free Fast RAM                 $7"+Str$(Fast Free/1024)+"K"
  3440.    Data " $2Free Chip RAM                 $7"+Str$(Chip Free/1024)+"K"
  3441.    Data ""
  3442.    Data " $2Levels found                  $7"+Str$(_NUMLEVELS)
  3443.    Data " $2Comments found                $7"+Str$(_NUMDEATHMESSAGE+_NUMSHOOTMESSAGE)
  3444.    Data ""
  3445.    Data " $2Tanks destroyed               $7"+Str$(_TANKS_DESTROYED)
  3446.    Data " $2Shots fired                   $7"+Str$(_SHOTS_FIRED)
  3447.    Data " $2Rounds played                 $7"+Str$(_ROUNDS_PLAYED)
  3448.    Data ""
  3449.    Data " $2Total playing time            $7"+_TIME$
  3450.    Data " $2Times loaded                  $7"+Str$(_TIMES_LOADED)
  3451.    Data ""
  3452.    Data " $1Weapon:                   Times fired:"
  3453.    Data "END"
  3454.    
  3455.    ' Control code reference:  
  3456.    ' $1=Red   
  3457.    ' $2=Green 
  3458.    ' $3=Blue
  3459.    ' $4=Yellow
  3460.    ' $5=Magenta 
  3461.    ' $6=Cyan
  3462.    ' $7=White 
  3463. End Proc
  3464.  
  3465. Procedure _DRAWOPTIONS
  3466.    Screen Copy 4,0,4,320,182 To 2,0,4
  3467.    Screen 2
  3468.    Reserve Zone 20
  3469.    '   Screen 3 
  3470.    Paste Bob 111,6,1202
  3471.    _DOBOX[134,170,"Main Menu",1]
  3472.    _DOTEXT3[10,41,"Number of rounds",0]
  3473.    _DOBOX[80,40,Str$(_NUMROUNDS)+" ",2]
  3474.    _DOTEXT3[10,51,"Gravity",0]
  3475.    Restore _GRAVDAT
  3476.    For Z=200 To _GRAVITY Step 800
  3477.       Read N$
  3478.    Next 
  3479.    _DOBOX[80,50,N$,3]
  3480.    _DOTEXT3[10,61,"Start cash",0]
  3481.    _DOBOX[80,60,Str$(_STARTCASH)+" ",4]
  3482.    _DOTEXT3[10,71,"Interest",0]
  3483.    _DOBOX[80,70,Str$(_INTEREST-100)+"% ",5]
  3484.    _DOTEXT3[10,81,"In-game audio",0]
  3485.    Restore _AUDIODAT
  3486.    For Z=0 To _AUDIO
  3487.       Read N$
  3488.    Next 
  3489.    _DOBOX[80,80,N$,6]
  3490.    _DOTEXT3[10,91,"Cash rewards",0]
  3491.    Restore _GENEROSITYDAT
  3492.    For Z=1 To _GENEROSITY
  3493.       Read N$
  3494.    Next 
  3495.    _DOBOX[80,90,N$,7]
  3496.    _DOTEXT3[10,101,"CPU IQ",0]
  3497.    _DOBOX[80,100,Str$(_IQ)+" ",8]
  3498.    _DOTEXT3[10,111,"Wind strength",0]
  3499.    Restore _WINDDAT
  3500.    For Z=0 To _WMODE
  3501.       Read N$
  3502.    Next 
  3503.    _DOBOX[80,110,N$,9]
  3504.    _DOTEXT3[10,121,"Turbo mode",0]
  3505.    Restore _TURBODAT
  3506.    For Z=0 To _TURBO
  3507.       Read N$
  3508.    Next 
  3509.    _DOBOX[80,120,N$,10]
  3510.    _DOTEXT3[10,131,"Training mode",0]
  3511.    Restore _TRAININGDAT
  3512.    For Z=0 To _TRAINING
  3513.       Read N$
  3514.    Next 
  3515.    _DOBOX[80,130,N$,11]
  3516.    _DOTEXT3[10,141,"Weapon select",0]
  3517.    Restore _CPUWEAPDAT
  3518.    For Z=0 To _CPUWEAP
  3519.       Read N$
  3520.    Next 
  3521.    _DOBOX[80,140,N$,12]
  3522.    
  3523.    
  3524.    _DOTEXT3[180,41,"Level mode",0]
  3525.    Restore _BITMAPDAT
  3526.    For Z=0 To _BITMAPLEVEL
  3527.       Read N$
  3528.    Next 
  3529.    _DOBOX[250,40,N$,13]
  3530.    
  3531.    If _BITMAPLEVEL=0
  3532.       _DOTEXT3[180,61,"Dirt drop",0]
  3533.       Restore _FALLDAT
  3534.       For Z=-1 To _TYPE
  3535.          Read N$
  3536.       Next 
  3537.       _DOBOX[250,60,N$,14]
  3538.       Y=80
  3539.       Restore _TERRDAT
  3540.       For Z=1 To 6
  3541.          Read N$
  3542.          _DOTEXT3[180,Y+1,N$,0]
  3543.          If _LEVELTYPEON(Z)=1
  3544.             _DOBOX[250,Y,"On",14+Z]
  3545.          Else 
  3546.             _DOBOX[250,Y,"Off",14+Z]
  3547.          End If 
  3548.          Add Y,10
  3549.       Next 
  3550.    Else 
  3551.       _DOTEXT3[180,61,"Round",0]
  3552.       _DOBOX[250,60,Str$(_ROUND)+" ",14]
  3553.       _DOTEXT3[180,71,"Map to use",0]
  3554.       _DOBOX[250,70,_LEVEL$(_ROUND(_ROUND)),15]
  3555.       _DOTEXT3[180,81,"Auto-randomize",0]
  3556.       Restore _TRAININGDAT
  3557.       For Z=0 To _AUTORANDOMIZE
  3558.          Read N$
  3559.       Next 
  3560.       _DOBOX[250,80,N$,16]
  3561.       _DOBOX[250,90,"Randomize",17]
  3562.       If _CHANGED2=1
  3563.          _CURRX=-256
  3564.          _CHANGED2=0
  3565.       Else 
  3566.          Screen Copy 6,0,0,119,63 To 2,180,100
  3567.       End If 
  3568.    End If 
  3569.    
  3570.    _FALLDAT:
  3571.    Data "Ugly","Pretty","Medium","Off"
  3572.    _GRAVDAT:
  3573.    Data "Moon","Earth","Jupiter"
  3574.    _AUDIODAT:
  3575.    Data "Music","Sound FX"
  3576.    _TERRDAT:
  3577.    Data "Mountains","City","Wastelands","Ice","Desert","Alien"
  3578.    _GENEROSITYDAT:
  3579.    Data "Very generous","Generous","Average","Stingey","Very stingey"
  3580.    _WINDDAT:
  3581.    Data "None","Low","High"
  3582.    _TURBODAT:
  3583.    Data "Off","On","When all comp","Comp only"
  3584.    _TRAININGDAT:
  3585.    Data "Off","On"
  3586.    _CPUWEAPDAT:
  3587.    Data "Dumb","Average","Smart"
  3588.    _BITMAPDAT:
  3589.    Data "Generate","Bitmap"
  3590. End Proc
  3591.  
  3592. Procedure _RENDERMAP
  3593.    If _BITMAPLEVEL=1
  3594.       T=Timer+1
  3595.       Repeat 
  3596.          If _CURRX<960
  3597.             If _CURRX=>0
  3598.                Screen 7
  3599.                If Screen Height=350
  3600.                   SY=162
  3601.                   Screen 6
  3602.                   Ink 16,0,0
  3603.                   Draw _CURRX/8,0 To _CURRX/8,20
  3604.                Else 
  3605.                   SY=0
  3606.                End If 
  3607.                For Y=SY To 511 Step 8
  3608.                   Screen 7
  3609.                   P= Extension_12_0470(_CURRX,Y-SY)
  3610.                   Screen 6
  3611.                    Extension_12_0394 _CURRX/8,Y/8,P+16
  3612.                Next 
  3613.             Else 
  3614.                Wait Vbl 
  3615.             End If 
  3616.             Add _CURRX,8
  3617.             If _CURRX=0
  3618.                _LOADMAP[7]
  3619.                If Param=0
  3620.                   'Screen Copy 4,180,100,299,163 To 6,180,100
  3621.                   For Z=16 To 23
  3622.                      Screen 7
  3623.                      C=Colour(Z-16)
  3624.                      Screen 2
  3625.                      Colour Z,C
  3626.                   Next 
  3627.                Else 
  3628.                   Screen 6
  3629.                   Cls 0
  3630.                   _DOTEXT3[33,19,"Level invalid",0]
  3631.                End If 
  3632.             End If 
  3633.             If _CURRX=>960
  3634.                Screen Close 7
  3635.                _DRAWOPTIONS
  3636.                Screen Copy 6,0,0,119,63 To 2,180,100
  3637.                Screen 2
  3638.                Screen Swap 
  3639.             End If 
  3640.          End If 
  3641.       Until Timer=>T
  3642.    End If 
  3643. End Proc
  3644.  
  3645. Procedure _DOOPTIONS
  3646.    _ROUND=1
  3647.    _CHANGED2=1
  3648.    _TYPE=_TURBOTEMP
  3649.    Screen Open 6,120,64,32,Lowres
  3650.    Screen Hide 6
  3651.    Curs Off 
  3652.    Flash Off 
  3653.    Cls 0
  3654.    Rainbow Del 0
  3655.    View 
  3656.    Wait Vbl 
  3657.    Repeat 
  3658.       _DRAWOPTIONS
  3659.       _DOSTUFF[_BITMAPLEVEL]
  3660.       MK=Param
  3661.       If MK=1
  3662.          _ADD=1
  3663.       End If 
  3664.       If MK=2
  3665.          _ADD=-1
  3666.       End If 
  3667.       M=Mouse Zone
  3668.       If M=2
  3669.          Add _NUMROUNDS,_ADD,1 To 999
  3670.          If _ROUND>_NUMROUNDS
  3671.             _ROUND=_NUMROUNDS
  3672.             _CHANGED2=1
  3673.          End If 
  3674.       End If 
  3675.       If M=3
  3676.          Add _GRAVITY,_ADD*800,200 To 1800
  3677.       End If 
  3678.       If M=4
  3679.          Add _STARTCASH,_ADD*50,0 To 5000
  3680.       End If 
  3681.       If M=5
  3682.          Add _INTEREST,_ADD,100 To 150
  3683.       End If 
  3684.       If M=6
  3685.          Add _AUDIO,1,0 To 1
  3686.       End If 
  3687.       If M=7
  3688.          Add _GENEROSITY,_ADD,1 To 5
  3689.       End If 
  3690.       If M=8
  3691.          Add _IQ,_ADD*25,25 To 300
  3692.       End If 
  3693.       If M=9
  3694.          Add _WMODE,_ADD,0 To 2
  3695.       End If 
  3696.       If M=10
  3697.          Add _TURBO,_ADD,0 To 3
  3698.       End If 
  3699.       If M=11
  3700.          Add _TRAINING,1,0 To 1
  3701.       End If 
  3702.       If M=12
  3703.          Add _CPUWEAP,_ADD,0 To 2
  3704.       End If 
  3705.       If M=13
  3706.          Add _BITMAPLEVEL,1,0 To 1
  3707.          _CHANGED2=1
  3708.       End If 
  3709.       If _BITMAPLEVEL=0
  3710.          If M=14
  3711.             Add _TYPE,_ADD,-1 To 2
  3712.             _TURBOTEMP=_TYPE
  3713.          End If 
  3714.          _NUMON=0
  3715.          For Z=1 To 6
  3716.             If _LEVELTYPEON(Z)=1
  3717.                Inc _NUMON
  3718.             End If 
  3719.          Next 
  3720.          For Z=1 To 6
  3721.             If M=14+Z
  3722.                If _LEVELTYPEON(Z)=1
  3723.                   If _NUMON>1
  3724.                      _LEVELTYPEON(Z)=0
  3725.                   End If 
  3726.                Else 
  3727.                   _LEVELTYPEON(Z)=1
  3728.                End If 
  3729.             End If 
  3730.          Next 
  3731.       Else 
  3732.          PR=_ROUND(_ROUND)
  3733.          If M=14
  3734.             Add _ROUND,_ADD,1 To _NUMROUNDS
  3735.          End If 
  3736.          If M=15
  3737.             Add _ROUND(_ROUND),_ADD,1 To _NUMLEVELS
  3738.          End If 
  3739.          If M=16
  3740.             Add _AUTORANDOMIZE,1,0 To 1
  3741.          End If 
  3742.          If M=17
  3743.             _RANDOMIZELEVELS
  3744.          End If 
  3745.          If PR<>_ROUND(_ROUND)
  3746.             _CHANGED2=1
  3747.          End If 
  3748.       End If 
  3749.    Until M=1
  3750.    Screen Close 6
  3751.    Screen 2
  3752.    Get Palette 4
  3753.    _DORAINBOW
  3754.    View 
  3755.    Wait Vbl 
  3756. End Proc
  3757.  
  3758. Procedure _RANDOMIZELEVELS
  3759.    If _NUMLEVELS=1
  3760.       For Z=1 To _NUMROUNDS
  3761.          _ROUND(Z)=1
  3762.       Next 
  3763.    Else 
  3764.       Dim _LEVELUSED(_NUMLEVELS)
  3765.       For Z=1 To _NUMLEVELS
  3766.          _LEVELUSED(Z)=0
  3767.       Next 
  3768.       _FREELEVELS=_NUMLEVELS
  3769.       For Z=1 To _NUMROUNDS
  3770.          Repeat 
  3771.             R=Rnd(_NUMLEVELS-1)+1
  3772.          Until _LEVELUSED(R)=0
  3773.          _ROUND(Z)=R
  3774.          Dec _FREELEVELS
  3775.          If _FREELEVELS=0
  3776.             For Z=1 To _NUMLEVELS
  3777.                _LEVELUSED(Z)=0
  3778.             Next 
  3779.             _FREELEVELS=_NUMLEVELS
  3780.          End If 
  3781.          _LEVELUSED(R)=1
  3782.       Next 
  3783.    End If 
  3784. End Proc
  3785.  
  3786. Procedure _GETTUNE
  3787.    If _NUMTUNES<1
  3788.       R=0
  3789.    Else 
  3790.       R=Rnd(_NUMTUNES)
  3791.    End If 
  3792.    
  3793.    _PLAYED(R)=1
  3794.    _PTUNE=R
  3795.    _GAP=0
  3796.    _GAPPT=Timer
  3797.    
  3798.    Track Stop 
  3799.    Erase 3
  3800.    Track Load _MUSICDISK$+_TUNE$(R),3
  3801.    Track Loop Of 
  3802. End Proc
  3803.  
  3804. Procedure _CHECKTUNE
  3805.    If _INGAME=0
  3806.       If Vumeter(0)=0 and Vumeter(1)=0 and Vumeter(2)=0 and Vumeter(3)=0
  3807.          Add _GAP,Max(0,Timer-_GAPPT)
  3808.          If _GAP>250
  3809.             _GAP=0
  3810.             
  3811.             _UNPLAYED=0
  3812.             For Z=0 To _NUMTUNES
  3813.                If _PLAYED(Z)=0
  3814.                   Inc _UNPLAYED
  3815.                End If 
  3816.             Next 
  3817.             If _UNPLAYED=0
  3818.                For Z=0 To _NUMTUNES
  3819.                   _PLAYED(Z)=0
  3820.                Next 
  3821.                Repeat 
  3822.                   If _NUMTUNES>0
  3823.                      R=Rnd(_NUMTUNES)
  3824.                   Else 
  3825.                      R=0
  3826.                      _PTUNE=-1
  3827.                   End If 
  3828.                Until _PTUNE<>R
  3829.             Else 
  3830.                If _UNPLAYED>1
  3831.                   N=Rnd(_UNPLAYED-1)
  3832.                Else 
  3833.                   N=0
  3834.                End If 
  3835.                For Z=0 To _NUMTUNES
  3836.                   If _PLAYED(Z)=0
  3837.                      Dec N
  3838.                      If N<0
  3839.                         R=Z
  3840.                         Z=_NUMTUNES
  3841.                      End If 
  3842.                   End If 
  3843.                Next 
  3844.             End If 
  3845.             
  3846.             _PTUNE=R
  3847.             _PLAYED(R)=1
  3848.             Track Stop 
  3849.             Erase 3
  3850.             Track Load _MUSICDISK$+_TUNE$(R),3
  3851.             Track Play 3
  3852.          End If 
  3853.       Else 
  3854.          _GAP=0
  3855.       End If 
  3856.    End If 
  3857.    Led Off 
  3858.    _GAPPT=Timer
  3859. End Proc
  3860.  
  3861. Procedure _DRAWQUIT[_NM]
  3862.    Screen Copy 4,0,4,320,182 To 2,0,4
  3863.    Screen 2
  3864.    Reserve Zone 2
  3865.    '   Screen 3 
  3866.    _DOBOX[134,170,"Main Menu",1]
  3867.    _DOBOX[134,80+(_NM*10),"Confirm",2]
  3868.    Restore _QUITDAT
  3869.    For Z=0 To _NM
  3870.       Read TXT$
  3871.    Next 
  3872.    _DOTEXT3[160-(Len(TXT$)*2),60,TXT$,0]
  3873.    _QUITDAT:
  3874.    Data "Are you sure that you want to quit?"
  3875.    Data "Completely and utterly?"
  3876.    Data "You're not just kidding me or something, are you?"
  3877.    Data "This is your last chance to see sense:"
  3878. End Proc
  3879.  
  3880. Procedure _DOQUIT
  3881.    _QUIT=0
  3882.    _NM=0
  3883.    Repeat 
  3884.       _DRAWQUIT[_NM]
  3885.       _DOSTUFF[0]
  3886.       MK=Param
  3887.       M=Mouse Zone
  3888.       If M=2
  3889.          Inc _NM
  3890.          If _NM>3
  3891.             Screen Copy 4,0,4,320,182 To 2,0,4
  3892.             Screen 2
  3893.             R=Rnd(3)
  3894.             If R=0
  3895.                TXT$="Oh bugger."
  3896.             End If 
  3897.             If R=1
  3898.                TXT$="Oh no, not again!"
  3899.             End If 
  3900.             If R=2
  3901.                TXT$="Go on, see if I care!"
  3902.             End If 
  3903.             If R=3
  3904.                TXT$="You know, computers have feelings too!"
  3905.             End If 
  3906.             _DOTEXT3[160-(Len(TXT$)*2),60,TXT$,0]
  3907.             Screen Swap 
  3908.             Wait Vbl 
  3909.             Wait 50
  3910.             _QUIT=1
  3911.             M=1
  3912.          End If 
  3913.       End If 
  3914.    Until M=1
  3915. End Proc[_QUIT]
  3916.  
  3917. Procedure _DRAWSETUP[NPL,ST]
  3918.    Screen Copy 4,0,4,320,182 To 2,0,4
  3919.    Screen 2
  3920.    Reserve Zone 15
  3921.    '   Screen 3 
  3922.    Paste Bob 124,6,1204
  3923.    _DOBOX[134,170,"Main Menu",1]
  3924.    _DOTEXT3[80,161,"Note: at least two players required",0]
  3925.    For PL=0 To 6
  3926.       If NPL=PL and ST=1
  3927.          _DOBOX2[58,(PL*20)+30," "+_PLNAME$(PL)+"*",_PLTYPE(PL),(PL*2)+2]
  3928.       Else 
  3929.          _DOBOX2[58,(PL*20)+30,_PLNAME$(PL),_PLTYPE(PL),(PL*2)+2]
  3930.       End If 
  3931.    Next 
  3932. End Proc
  3933.  
  3934. Procedure _DOSETUP
  3935.    Repeat 
  3936.       _DRAWSETUP[0,0]
  3937.       _DOSTUFF[0]
  3938.       M=Mouse Zone
  3939.       If M>1
  3940.          PL=(M-2)/2
  3941.          TY=(M-2)-(PL*2)
  3942.          If TY=0
  3943.             _FLAG=0
  3944.             Repeat 
  3945.                Repeat 
  3946.                   _DRAWSETUP[PL,_FLAG]
  3947.                   _FLAG=1-_FLAG
  3948.                   Screen 2
  3949.                   Screen Swap 
  3950.                   Wait Vbl 
  3951.                   I$=Inkey$
  3952.                Until I$<>""
  3953.                Repeat 
  3954.                   A=Asc(I$)
  3955.                   If A=8
  3956.                      If Len(_PLNAME$(PL))>0
  3957.                         _PLNAME$(PL)=Left$(_PLNAME$(PL),Len(_PLNAME$(PL))-1)
  3958.                         _CHANGED=1
  3959.                      End If 
  3960.                   Else 
  3961.                      If A=>32 and A<=122 and Len(_PLNAME$(PL))<40
  3962.                         _PLNAME$(PL)=_PLNAME$(PL)+I$
  3963.                         _CHANGED=1
  3964.                      End If 
  3965.                   End If 
  3966.                   If A=13
  3967.                      I$=""
  3968.                   Else 
  3969.                      I$=Inkey$
  3970.                   End If 
  3971.                Until I$=""
  3972.             Until A=13
  3973.             Clear Key 
  3974.          Else 
  3975.             Add _PLTYPE(PL),1,0 To 2
  3976.          End If 
  3977.       Else 
  3978.          _NUMON=0
  3979.          For Z=0 To 6
  3980.             If _PLTYPE(Z)<>0
  3981.                Inc _NUMON
  3982.             End If 
  3983.          Next 
  3984.          If _NUMON<2
  3985.             M=0
  3986.          End If 
  3987.       End If 
  3988.    Until M=1
  3989. End Proc
  3990.  
  3991. Procedure _MAINGAME[_FIRST]
  3992.    If _BITMAPLEVEL=0
  3993.       _TIME=Rnd(2)
  3994.    Else 
  3995.       _TIME=2
  3996.    End If 
  3997.    Repeat 
  3998.       _TERRAIN=Rnd(5)+1
  3999.    Until _LEVELTYPEON(_TERRAIN)=1
  4000.    _EDGETYPE=Rnd(3)
  4001.    If _WMODE=0
  4002.       _WIND=0
  4003.    End If 
  4004.    If _WMODE=1
  4005.       _WIND=Rnd(98)-49
  4006.    End If 
  4007.    If _WMODE=2
  4008.       If Rnd(1)=0
  4009.          _WIND=Rnd(49)+50
  4010.       Else 
  4011.          _WIND=-99+Rnd(49)
  4012.       End If 
  4013.    End If 
  4014.    For Z=0 To 13
  4015.       Repeat 
  4016.          _ORDER(Z)=Rnd(13)
  4017.          OKAY=1
  4018.          If Z>0
  4019.             For A=0 To Z-1
  4020.                If _ORDER(A)=_ORDER(Z)
  4021.                   OKAY=0
  4022.                End If 
  4023.             Next 
  4024.          End If 
  4025.       Until OKAY=1
  4026.    Next 
  4027.    For Z=0 To 6
  4028.       Repeat 
  4029.          _ORDER2(Z)=Rnd(6)
  4030.          OKAY=1
  4031.          If Z>0
  4032.             For A=0 To Z-1
  4033.                If _ORDER2(A)=_ORDER2(Z)
  4034.                   OKAY=0
  4035.                End If 
  4036.             Next 
  4037.          End If 
  4038.       Until OKAY=1
  4039.    Next 
  4040.    For Z=0 To 6
  4041.       If _PLTYPE(Z)>0
  4042.          _PLX(Z)=(_ORDER(Z)*68)+31
  4043.          _PLANGLE(Z)=0
  4044.          _PLPOWER(Z)=200
  4045.          _PLHEALTH(Z)=999
  4046.          _PLSHIELDTYPE(Z)=0
  4047.          _PLSHIELD(Z)=0
  4048.          _PLOFX(Z)=0
  4049.          _PLOFY(Z)=0
  4050.          _PLALIVE(Z)=2
  4051.       Else 
  4052.          _PLHEALTH(Z)=-1
  4053.          _PLALIVE(Z)=0
  4054.       End If 
  4055.    Next 
  4056.    _SKIPVBL=0
  4057.    _TYPE=_TURBOTEMP
  4058.    
  4059.    Clear Key 
  4060.    If _FIRST=1
  4061.       _FIRST=0
  4062.       _DRAWINFO[0]
  4063.    Else 
  4064.       _DRAWINFO[1]
  4065.    End If 
  4066.    
  4067.    If _BITMAPLEVEL=1
  4068.       _TIME=1
  4069.       Screen Open 0,960,512,16,Lowres
  4070.       Screen Hide 0
  4071.       Screen Display 0,128,42,320,256
  4072.       Flash Off 
  4073.       Curs Off 
  4074.       Cls 0
  4075.       _TYPE=2
  4076.       _LOADMAP[1]
  4077.       If Param=1
  4078.          End 
  4079.       End If 
  4080.       Screen 1
  4081.       _OL=Colour(0)
  4082.       _COL=Colour(1)
  4083.       _BOL1=Colour(2)
  4084.       _BOL2=Colour(3)
  4085.       _BOL3=Colour(4)
  4086.       _BOL4=Colour(5)
  4087.       _BOL5=Colour(6)
  4088.       _BOL6=Colour(7)
  4089.       If Screen Height<>512
  4090.          Screen Copy 1,0,0,960,350 To 0,0,162
  4091.       Else 
  4092.          Screen Copy 1 To 0
  4093.       End If 
  4094.    End If 
  4095.    
  4096.    Unpack 10 To 1
  4097.    Screen Hide 1
  4098.    Screen Copy 1,0,0,320,49 To 1,0,285
  4099.    
  4100.    ' NEW: 
  4101.    '  1 = fire/done 
  4102.    '  2 = power bar 
  4103.    '  3 = angle 
  4104.    '  4 = shop
  4105.    '  5 = map toggle
  4106.    '  6 = scroll
  4107.    '  7 = logo/recentre on tank 
  4108.    '  8 = Shop: scroll left 
  4109.    '  9 = Shop: scroll right
  4110.    ' 10 = Shop: done
  4111.    ' 11 = Shop: item list area
  4112.    
  4113.    Reserve Zone 11
  4114.    Set Zone 1,123,25 To 138,40
  4115.    Set Zone 2,6,25 To 81,31
  4116.    Set Zone 3,86,25 To 120,31
  4117.    Set Zone 4,141,24 To 165,40
  4118.    Set Zone 5,141,6 To 165,22
  4119.    Set Zone 6,168,6 To 202,40
  4120.    Set Zone 7,204,6 To 313,26
  4121.    Set Zone 8,260,54 To 276,64
  4122.    Set Zone 9,298,54 To 314,64
  4123.    Set Zone 10,260,133 To 314,142
  4124.    Set Zone 11,5,55 To 256,141
  4125.    ' OLD: 
  4126.    '  1 = fire (1)
  4127.    '  2 = weapon list scroll down 
  4128.    '  3 = weapon list scroll up 
  4129.    '  4 = buy 
  4130.    '  5 = defense list scroll down  
  4131.    '  6 = defense list scroll up  
  4132.    '  7 = power bar (2) 
  4133.    '  8 = angle (3) 
  4134.    '  9 = map toggle (5)
  4135.    ' 10 = scroll left 
  4136.    ' 11 = scroll up 
  4137.    ' 12 = scroll right
  4138.    ' 13 = scroll down 
  4139.    ' 14 = recentre on tank (7)
  4140.    ' 15 = ADS done button (1) 
  4141.    
  4142.    '   Reserve Zone 15  
  4143.    '   Set Zone 1,8,45 To 65,52 
  4144.    '   Set Zone 2,66,45 To 77,52
  4145.    '   Set Zone 3,78,45 To 89,52
  4146.    '   Set Zone 4,92,45 To 149,52 
  4147.    '   Set Zone 5,150,45 To 161,52
  4148.    '   Set Zone 6,162,45 To 173,52
  4149.    '   Set Zone 7,176,48 To 276,53
  4150.    '   Set Zone 8,278,48 To 311,53
  4151.    '   Set Zone 9,295,31 To 310,38
  4152.    '   Set Zone 10,0,4 To 4,53
  4153.    '   Set Zone 11,4,0 To 314,4 
  4154.    '   Set Zone 12,314,4 To 319,53
  4155.    '   Set Zone 13,4,53 To 314,58 
  4156.    '   Set Zone 14,179,7 To 196,18
  4157.    '   Set Zone 15,23,39 To 80,46 
  4158.    
  4159.    If _TIME<2
  4160.       Set Rainbow 0,0,260,"","",""
  4161.       If _BITMAPLEVEL=0
  4162.          If _TIME=0
  4163.             Restore _RAINDAT
  4164.          Else 
  4165.             Restore _RAINDAT2
  4166.          End If 
  4167.          OLDCOL=$0
  4168.          For Z=0 To 259 Step 4
  4169.             Read NEWCOL
  4170.             Rain(0,Z)=NEWCOL
  4171.             Rain(0,Z+1)=OLDCOL
  4172.             Rain(0,Z+2)=NEWCOL
  4173.             Rain(0,Z+3)=NEWCOL
  4174.             OLDCOL=NEWCOL
  4175.          Next 
  4176.       Else 
  4177.          _CENTRER=_OL/256
  4178.          _CENTREG=(_OL-(_CENTRER*256))/16
  4179.          _CENTREB=_OL-(_CENTRER*256)-(_CENTREG*16)
  4180.          _OL=$0
  4181.          OLDCOL=$0
  4182.          For Z=0 To 259 Step 4
  4183.             P=((Z*32)/260)-16
  4184.             If P<0
  4185.                P=-(P+1)
  4186.                _NEWR=((15-P)*_CENTRER)/16
  4187.                _NEWG=((15-P)*_CENTREG)/16
  4188.                _NEWB=((15-P)*_CENTREB)/16
  4189.             Else 
  4190.                _NEWR=((P*(15-_CENTRER))/16)+_CENTRER
  4191.                _NEWG=((P*(15-_CENTREG))/16)+_CENTREG
  4192.                _NEWB=((P*(15-_CENTREB))/16)+_CENTREB
  4193.             End If 
  4194.             NEWCOL=(Min(15,Max(0,_NEWR))*256)+(Min(15,Max(0,_NEWG))*16)+Min(15,Max(0,_NEWB))
  4195.             Rain(0,Z)=NEWCOL
  4196.             Rain(0,Z+1)=OLDCOL
  4197.             Rain(0,Z+2)=NEWCOL
  4198.             Rain(0,Z+3)=NEWCOL
  4199.             OLDCOL=NEWCOL
  4200.          Next 
  4201.       End If 
  4202.    End If 
  4203.    
  4204.    If _BITMAPLEVEL=0
  4205.       CY=(Rnd(255)+127)*16
  4206.       CYS=0
  4207.       NRY=Rnd(255)+127
  4208.       For X=0 To 959
  4209.          If _TERRAIN=1 or _TERRAIN=5 or _TERRAIN=6
  4210.             If _TERRAIN=6
  4211.                If CY/16>400
  4212.                   CYS=-Abs(CYS)
  4213.                End If 
  4214.                If CY/16<100
  4215.                   CYS=Abs(CYS)
  4216.                End If 
  4217.             Else 
  4218.                If CY/16>383
  4219.                   Dec CYS
  4220.                End If 
  4221.                If CY/16<127
  4222.                   Inc CYS
  4223.                End If 
  4224.                If CY/16>450
  4225.                   Dec CYS
  4226.                End If 
  4227.                If CY/16<50
  4228.                   Inc CYS
  4229.                End If 
  4230.             End If 
  4231.             If CYS>32
  4232.                CYS=32
  4233.             End If 
  4234.             If CYS<-32
  4235.                CYS=-32
  4236.             End If 
  4237.             If _TERRAIN=6
  4238.                Add CYS,Rnd(4)-2
  4239.             Else 
  4240.                Add CYS,Rnd(8)-4
  4241.             End If 
  4242.             Add CY,CYS
  4243.          End If 
  4244.          If _TERRAIN=2
  4245.             CX=(X/128)*128
  4246.             If CX=X
  4247.                PY=NRY
  4248.                NRY=Rnd(255)+127
  4249.                CY=PY*16
  4250.             Else 
  4251.                DIST=X-CX
  4252.                CY=((((NRY-PY)*DIST)/128)+PY)*16
  4253.             End If 
  4254.          End If 
  4255.          If _TERRAIN=3
  4256.             Add CY,(Rnd(2)-1)*16
  4257.             If CY/16>450
  4258.                Add CY,-16
  4259.             End If 
  4260.             If CY/16<50
  4261.                Add CY,16
  4262.             End If 
  4263.          End If 
  4264.          If _TERRAIN=4
  4265.             CX=(X/32)*32
  4266.             If CX=X
  4267.                PY=NRY
  4268.                If Rnd(10)=1
  4269.                   NRY=Rnd(255)+127
  4270.                Else 
  4271.                   Add NRY,Rnd(32)-16
  4272.                   If NRY<127
  4273.                      NRY=127
  4274.                   End If 
  4275.                   If NRY>382
  4276.                      NRY=382
  4277.                   End If 
  4278.                End If 
  4279.                CY=PY*16
  4280.             Else 
  4281.                DIST=X-CX
  4282.                CY=((((NRY-PY)*DIST)/32)+PY)*16
  4283.             End If 
  4284.          End If 
  4285.          If _TERRAIN=5
  4286.             SPY(X)=(CY/64)+200
  4287.          Else 
  4288.             SPY(X)=CY/16
  4289.          End If 
  4290.          For Z=0 To 6
  4291.             If _PLX(Z)=X
  4292.                _PLY(Z)=SPY(X)
  4293.             End If 
  4294.          Next 
  4295.       Next 
  4296.       _DOGROUND
  4297.    Else 
  4298.       Screen 0
  4299.       For Z=0 To 6
  4300.          If _PLTYPE(Z)>0
  4301.             _PLY(Z)=0
  4302.             While Extension_12_0470(_PLX(Z),_PLY(Z))=0
  4303.                Inc _PLY(Z)
  4304.             Wend 
  4305.          End If 
  4306.       Next 
  4307.    End If 
  4308.    
  4309.    _AIMX=0
  4310.    _AIMY=0
  4311.    _HEIGHT=256
  4312.    XS=0
  4313.    YS=0
  4314.    _KILLINFO
  4315.    _QUIT=Param
  4316.    If _QUIT=0
  4317.       _OFX=0
  4318.       _OFY=0
  4319.       Screen 0
  4320.       _SELECTCOLOUR
  4321.       _CCOL=Colour(8)
  4322.       For Z=0 To 31
  4323.          Colour Z,$0
  4324.       Next 
  4325.       Screen To Front 1
  4326.       Screen Show 0
  4327.       Screen 0
  4328.       If _BITMAPLEVEL=0
  4329.          'Terrains:1=Hilly(Green),2=Flat(Light grey),3=Rough(Brown) 
  4330.          If _TERRAIN=1
  4331.             Fade 2,$0,$210,$521,$831,$B52,$40,$60,$80,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4332.          End If 
  4333.          If _TERRAIN=2
  4334.             Fade 2,$0,$555,$666,$777,$888,$999,$AAA,$BBB,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4335.          End If 
  4336.          If _TERRAIN=3
  4337.             Fade 2,$0,$731,$832,$942,$A42,$831,$742,$552,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4338.          End If 
  4339.          If _TERRAIN=4
  4340.             Fade 2,$0,$6CC,$7DD,$8EE,$9FF,$AFF,$BFF,$CFF,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4341.          End If 
  4342.          If _TERRAIN=5
  4343.             Fade 2,$0,$770,$880,$990,$AA0,$BB0,$CC0,$DD0,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4344.          End If 
  4345.          If _TERRAIN=6
  4346.             Fade 2,$0,$A0A,$909,$808,$707,$B,$D,$F,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4347.          End If 
  4348.       Else 
  4349.          ' 0=background, 1-7=ground, 8=shots, 9-15=explosions/colour cycling, 16-31=tank colours
  4350.          Fade 2,_OL,_COL,_BOL1,_BOL2,_BOL3,_BOL4,_BOL5,_BOL6,_CCOL,$1,$1,$1,$1,$1,$1,$1,$0,$777,$F,$F0,$0,$777,$F00,$FF0,$0,$777,$FF,$F0F,$0,$777,$639,$F70
  4351.       End If 
  4352.       Auto View Off 
  4353.       Bob Update Off 
  4354.       SPL=0
  4355.       _PREBUY=1
  4356.       PL=_ORDER2(0)
  4357.       If Prg State<>1
  4358.          If _AUDIO=1
  4359.             If Length(5)=0
  4360.                Load "RAM:FASamples.abk",5
  4361.             End If 
  4362.          Else 
  4363.             Erase 5
  4364.          End If 
  4365.       End If 
  4366.       If _AUDIO=1
  4367.          Track Stop 
  4368.          _INGAME=1
  4369.       End If 
  4370.       Led Off 
  4371.       Clear Key 
  4372.       Repeat 
  4373.          If Asc(Inkey$)=27
  4374.             For Z=0 To 6
  4375.                _PLHEALTH(Z)=-1
  4376.                _PLALIVE(Z)=0
  4377.             Next 
  4378.             _SPECIALQUIT=1
  4379.          End If 
  4380.          _DOINTERFACE[PL]
  4381.          SSN=0
  4382.          Repeat 
  4383.             Inc SSN
  4384.             Add SPL,1,0 To 6
  4385.             PL=_ORDER2(SPL)
  4386.             If SPL=0
  4387.                _PREBUY=0
  4388.                S=Screen
  4389.                Screen 1
  4390.                Bob Off 
  4391.                Bob Update 
  4392.                Wait Vbl 
  4393.                Screen Copy 1,123,25+285,139,41+285 To 1,123,25
  4394.                Screen S
  4395.                If WMODE<>0
  4396.                   Add _WIND,Rnd(8)-4
  4397.                   If _WMODE=2
  4398.                      MXWND=99
  4399.                   Else 
  4400.                      MXWND=49
  4401.                   End If 
  4402.                   If _WIND>MXWND
  4403.                      _WIND=MXWND
  4404.                   End If 
  4405.                   If _WIND<-MXWND
  4406.                      _WIND=-MXWND
  4407.                   End If 
  4408.                End If 
  4409.             End If 
  4410.          Until(_PLTYPE(PL)>0 and _PLHEALTH(PL)=>0) or SSN>7
  4411.          _CHECKTUNE
  4412.          
  4413.          Shift Off 
  4414.          _RESETEXPLOSIONS
  4415.          _DROPTANKS
  4416.          
  4417.          _NUMALIVE=0
  4418.          For Z=0 To 6
  4419.             If _PLALIVE(Z)=1
  4420.                _DEATH[Z]
  4421.                _PLALIVE(Z)=0
  4422.                _PLHEALTH(Z)=-1
  4423.             End If 
  4424.             If _PLHEALTH(Z)=>0
  4425.                Inc _NUMALIVE
  4426.             End If 
  4427.          Next 
  4428.          
  4429.       Until _NUMALIVE<=1
  4430.       _COLLECT_GARBAGE=Free
  4431.       _INGAME=0
  4432.       If _SPECIALQUIT=1
  4433.          _QUIT=1
  4434.          _SPECIALQUIT=0
  4435.       End If 
  4436.       Screen 1
  4437.       Fade 4
  4438.       _SKIPVBL=0
  4439.       For _HEIGHT=256 To(_NTSC*56) Step -4
  4440.          _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  4441.       Next 
  4442.       _HEIGHT=_NTSC*56
  4443.       Screen Close 0
  4444.       Rainbow Del 0
  4445.       Sprite Off 
  4446.       Sprite Update 
  4447.       Screen Close 1
  4448.       
  4449.       If _AUDIO=1
  4450.          Sam Stop 
  4451.          Track Play 3
  4452.       End If 
  4453.       
  4454.       _WINNER=-1
  4455.       For Z=0 To 6
  4456.          If _PLHEALTH(Z)=>0 and _PLTYPE(Z)<>0
  4457.             _WINNER=Z
  4458.          End If 
  4459.       Next 
  4460.       
  4461.       If _WINNER<>-1
  4462.          Add _PLCASH(_WINNER),250
  4463.       End If 
  4464.       
  4465.       For Z=0 To 6
  4466.          _PLCASH(Z)=(_PLCASH(Z)*_INTEREST)/100
  4467.       Next 
  4468.    End If 
  4469.    
  4470.    _RAINDAT:
  4471.    Data $1,$2,$3,$4,$5,$6,$7,$8,$9,$A,$B,$C,$D,$E,$F
  4472.    Data $1F,$1F,$2F,$2F,$3F,$3F,$4F,$4F,$5F,$5F,$6F,$6F,$7F,$7F,$8F,$8F,$9F,$9F,$AF,$AF,$BF,$BF,$CF,$CF,$DF,$DF,$EF,$EF,$FF,$FF
  4473.    Data $1FF,$2FF,$3FF,$4FF,$5FF,$6FF,$7FF,$8FF,$9FF,$AFF,$BFF,$CFF,$DFF,$EFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  4474.    
  4475.    _RAINDAT2:
  4476.    Data $100,$200,$300,$400,$500,$600,$700,$800,$900,$A00,$B00,$C00,$D00,$E00,$F00
  4477.    Data $F10,$F10,$F20,$F20,$F30,$F30,$F40,$F40,$F50,$F50,$F60,$F60,$F70,$F70,$F80,$F80,$F90,$F90,$FA0,$FA0,$FB0,$FB0,$FC0,$FC0,$FD0,$FD0,$FE0,$FE0,$FF0,$FF0
  4478.    Data $FF1,$FF2,$FF3,$FF4,$FF5,$FF6,$FF7,$FF8,$FF9,$FFA,$FFB,$FFC,$FFD,$FFE,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  4479. End Proc[_QUIT]
  4480.  
  4481. Procedure _DOGROUND
  4482.    If _TERRAIN=5
  4483.       Unpack 22 To 0
  4484.    Else 
  4485.       Unpack 21 To 0
  4486.    End If 
  4487.    Screen Hide 0
  4488.    Screen Display 0,128,42,320,256
  4489.    Screen 0
  4490.    Ink 0,0,0
  4491.    For X=0 To 959
  4492.       Draw X,0 To X,SPY(X)-1
  4493.       If _TERRAIN=5
  4494.          T=Rnd(2)
  4495.       Else 
  4496.          T=2
  4497.       End If 
  4498.       For _AD=0 To T
  4499.           Extension_12_0394 X,SPY(X)+_AD,7-_AD
  4500.       Next 
  4501.    Next 
  4502. End Proc
  4503.  
  4504. Procedure _DOFIRE[PL]
  4505.    _SKIPVBL=0
  4506.    If _TURBO=1
  4507.       _SKIPVBL=1
  4508.       If _TYPE<>2
  4509.          _TYPE=-1
  4510.       End If 
  4511.    End If 
  4512.    If _TURBO=2
  4513.       _SKIPVBL=1
  4514.       If _BITMAPLEVEL=0
  4515.          If _TYPE<>2
  4516.             _TYPE=-1
  4517.          End If 
  4518.       Else 
  4519.          _TYPE=2
  4520.       End If 
  4521.       For Z=0 To 6
  4522.          If _PLTYPE(Z)=1 and _PLHEALTH(Z)=>0
  4523.             _SKIPVBL=0
  4524.             If BITMAPLEVEL=0
  4525.                _TYPE=_TURBOTEMP
  4526.             Else 
  4527.                _TYPE=2
  4528.             End If 
  4529.             Z=7
  4530.          End If 
  4531.       Next 
  4532.    End If 
  4533.    If _TURBO=3
  4534.       If _PLTYPE(PL)=2
  4535.          _SKIPVBL=1
  4536.          If _TYPE<>2
  4537.             _TYPE=-1
  4538.          End If 
  4539.       End If 
  4540.    End If 
  4541.    Inc _SHOTS_FIRED
  4542.    _ADDSHOOT[PL]
  4543.    _HIT=0
  4544.    _SKIP=0
  4545.    _DIRT=0
  4546.    _RESETEXPLOSIONS
  4547.    For Z=0 To 9
  4548.       _BT(Z)=0
  4549.    Next 
  4550.    _TXS=Cos(_PLANGLE(PL)-90)*_PLPOWER(PL)*100
  4551.    _TYS=Sin(_PLANGLE(PL)-90)*_PLPOWER(PL)*100
  4552.    Inc _WEAPUSED(_PLWEAP(PL))
  4553.    _PLWP=_WEAPCODE(_PLWEAP(PL))
  4554.    If _PLWP=33
  4555.       Repeat 
  4556.          _PLWP=Rnd(_NUMWEAP-1)
  4557.       Until _PLWP<>33
  4558.    End If 
  4559.    If _PLWP=0
  4560.       _BT(0)=1
  4561.       _BX(0)=_PLX(PL)*8192
  4562.       _BY(0)=(_PLY(PL)-6)*8192
  4563.       _BXS(0)=_TXS
  4564.       _BYS(0)=_TYS
  4565.    End If 
  4566.    If _PLWP=1
  4567.       _BT(0)=2
  4568.       _BX(0)=_PLX(PL)*8192
  4569.       _BY(0)=(_PLY(PL)-6)*8192
  4570.       _BXS(0)=_TXS
  4571.       _BYS(0)=_TYS
  4572.    End If 
  4573.    If _PLWP=2
  4574.       _BT(0)=6
  4575.       _BX(0)=_PLX(PL)*8192
  4576.       _BY(0)=(_PLY(PL)-6)*8192
  4577.       _BXS(0)=_TXS
  4578.       _BYS(0)=_TYS
  4579.    End If 
  4580.    If _PLWP=3
  4581.       _BT(0)=8
  4582.       _BX(0)=_PLX(PL)*8192
  4583.       _BY(0)=(_PLY(PL)-6)*8192
  4584.       _BXS(0)=_TXS
  4585.       _BYS(0)=_TYS
  4586.    End If 
  4587.    If _PLWP=4
  4588.       _CURRADD=-100
  4589.       For Z=0 To 2
  4590.          _TXS=Cos(_PLANGLE(PL)+_CURRADD)*_PLPOWER(PL)*100
  4591.          _TYS=Sin(_PLANGLE(PL)+_CURRADD)*_PLPOWER(PL)*100
  4592.          Add _CURRADD,10
  4593.          _BT(Z)=2
  4594.          _BX(Z)=_PLX(PL)*8192
  4595.          _BY(Z)=(_PLY(PL)-6)*8192
  4596.          _BXS(Z)=_TXS
  4597.          _BYS(Z)=_TYS
  4598.       Next 
  4599.    End If 
  4600.    If _PLWP=5
  4601.       _CURRANGLE=-180
  4602.       For Z=0 To 4
  4603.          _TXS=Cos(_CURRANGLE)*_PLPOWER(PL)*100
  4604.          _TYS=Sin(_CURRANGLE)*_PLPOWER(PL)*100
  4605.          Add _CURRANGLE,45
  4606.          _BT(Z)=2
  4607.          _BX(Z)=_PLX(PL)*8192
  4608.          _BY(Z)=(_PLY(PL)-6)*8192
  4609.          _BXS(Z)=_TXS
  4610.          _BYS(Z)=_TYS
  4611.       Next 
  4612.    End If 
  4613.    If _PLWP=6
  4614.       _BT(0)=3
  4615.       _BX(0)=_PLX(PL)*8192
  4616.       _BY(0)=(_PLY(PL)-6)*8192
  4617.       _BXS(0)=_TXS
  4618.       _BYS(0)=_TYS
  4619.    End If 
  4620.    If _PLWP=7
  4621.       _BT(0)=4
  4622.       _BX(0)=_PLX(PL)*8192
  4623.       _BY(0)=(_PLY(PL)-6)*8192
  4624.       _BXS(0)=_TXS
  4625.       _BYS(0)=_TYS
  4626.    End If 
  4627.    If _PLWP=8
  4628.       _BT(0)=5
  4629.       _BX(0)=_PLX(PL)*8192
  4630.       _BY(0)=(_PLY(PL)-6)*8192
  4631.       _BXS(0)=_TXS
  4632.       _BYS(0)=_TYS
  4633.    End If 
  4634.    If _PLWP=9
  4635.       _BT(0)=-1
  4636.       _BX(0)=_PLX(PL)*8192
  4637.       _BY(0)=(_PLY(PL)-6)*8192
  4638.       _BXS(0)=_TXS
  4639.       _BYS(0)=_TYS
  4640.    End If 
  4641.    If _PLWP=10
  4642.       _BT(0)=-2
  4643.       _BX(0)=_PLX(PL)*8192
  4644.       _BY(0)=(_PLY(PL)-6)*8192
  4645.       _BXS(0)=_TXS
  4646.       _BYS(0)=_TYS
  4647.    End If 
  4648.    If _PLWP=11
  4649.       _BT(0)=9
  4650.       _BX(0)=_PLX(PL)*8192
  4651.       _BY(0)=(_PLY(PL)-6)*8192
  4652.       _BXS(0)=_TXS
  4653.       _BYS(0)=_TYS
  4654.    End If 
  4655.    If _PLWP=12
  4656.       _BT(0)=10
  4657.       _BX(0)=_PLX(PL)*8192
  4658.       _BY(0)=(_PLY(PL)-6)*8192
  4659.       _BXS(0)=_TXS
  4660.       _BYS(0)=_TYS
  4661.    End If 
  4662.    If _PLWP=13
  4663.       _BT(0)=13
  4664.       _BX(0)=_PLX(PL)*8192
  4665.       _BY(0)=(_PLY(PL)-6)*8192
  4666.       _BXS(0)=_TXS
  4667.       _BYS(0)=_TYS
  4668.    End If 
  4669.    If _PLWP=14
  4670.       _BT(0)=14
  4671.       _BX(0)=_PLX(PL)*8192
  4672.       _BY(0)=(_PLY(PL)-6)*8192
  4673.       _BXS(0)=_TXS
  4674.       _BYS(0)=_TYS
  4675.    End If 
  4676.    If _PLWP=15
  4677.       _BT(0)=15
  4678.       _BX(0)=_PLX(PL)*8192
  4679.       _BY(0)=(_PLY(PL)-6)*8192
  4680.       _BXS(0)=_TXS
  4681.       _BYS(0)=_TYS
  4682.    End If 
  4683.    If _PLWP=16
  4684.       LX=999
  4685.       RX=0
  4686.       For D=1 To 200
  4687.          NX=_PLX(PL)+(Cos(_PLANGLE(PL)-90)*D)-(Cos(_PLANGLE(PL))*D/4)
  4688.          NY=(_PLY(PL)-6)+(Sin(_PLANGLE(PL)-90)*D)-(Sin(_PLANGLE(PL))*D/4)
  4689.          For SL=0 To D/2
  4690.             If Rnd(2)=2
  4691.                TX=NX+(Cos(_PLANGLE(PL))*SL)
  4692.                 Extension_12_0394 TX,NY+(Sin(_PLANGLE(PL))*SL),Rnd(3)+1
  4693.                RX=Max(TX,RX)
  4694.                LX=Min(TX,LX)
  4695.             End If 
  4696.          Next 
  4697.       Next 
  4698.       _SKIP=1
  4699.       S=(RX-LX)/2
  4700.       _EX(0)=(LX+RX)/2
  4701.       _EY(0)=513-S
  4702.       _ET(0)=-(S+1)
  4703.       _DIRT=1
  4704.    End If 
  4705.    If _PLWP=17
  4706.       _BT(0)=-3
  4707.       _BX(0)=_PLX(PL)*8192
  4708.       _BY(0)=(_PLY(PL)-6)*8192
  4709.       _BXS(0)=_TXS
  4710.       _BYS(0)=_TYS
  4711.    End If 
  4712.    If _PLWP=18
  4713.       _BT(0)=-4
  4714.       _BX(0)=_PLX(PL)*8192
  4715.       _BY(0)=(_PLY(PL)-6)*8192
  4716.       _BXS(0)=_TXS
  4717.       _BYS(0)=_TYS
  4718.    End If 
  4719.    If _PLWP=19
  4720.       _BT(0)=-5
  4721.       _BX(0)=_PLX(PL)*8192
  4722.       _BY(0)=(_PLY(PL)-6)*8192
  4723.       _BXS(0)=_TXS
  4724.       _BYS(0)=_TYS
  4725.    End If 
  4726.    If _PLWP=20
  4727.       _BT(0)=-6
  4728.       _BX(0)=_PLX(PL)*8192
  4729.       _BY(0)=(_PLY(PL)-6)*8192
  4730.       _BXS(0)=_TXS
  4731.       _BYS(0)=_TYS
  4732.    End If 
  4733.    If _PLWP=21
  4734.       _BT(0)=16
  4735.       _BX(0)=_PLX(PL)*8192
  4736.       _BY(0)=(_PLY(PL)-6)*8192
  4737.       _BXS(0)=_TXS
  4738.       _BYS(0)=_TYS
  4739.    End If 
  4740.    If _PLWP=22
  4741.       _BT(0)=17
  4742.       _BX(0)=_PLX(PL)*8192
  4743.       _BY(0)=(_PLY(PL)-6)*8192
  4744.       _BXS(0)=_TXS
  4745.       _BYS(0)=_TYS
  4746.    End If 
  4747.    If _PLWP=23
  4748.       _BT(0)=20
  4749.       _BX(0)=_PLX(PL)*8192
  4750.       _BY(0)=(_PLY(PL)-6)*8192
  4751.       _BXS(0)=_TXS
  4752.       _BYS(0)=_TYS
  4753.    End If 
  4754.    If _PLWP=24
  4755.       _BT(0)=21
  4756.       _BX(0)=_PLX(PL)*8192
  4757.       _BY(0)=(_PLY(PL)-6)*8192
  4758.       _BXS(0)=_TXS
  4759.       _BYS(0)=_TYS
  4760.    End If 
  4761.    If _PLWP=25
  4762.       _PLAYSAMP[11]
  4763.       _C=Colour(8)
  4764.       Colour 8,$F00
  4765.       _SKIP=1
  4766.       _LX=_PLX(PL)*8192
  4767.       _LY=(_PLY(PL)-6)*8192
  4768.       _LXS=Cos(_PLANGLE(PL)-90)*8192
  4769.       _LYS=Sin(_PLANGLE(PL)-90)*8192
  4770.       _LOST=0
  4771.       _CL=0
  4772.       _MINX=999
  4773.       _MAXX=0
  4774.       _MAXY=0
  4775.       SPN=0
  4776.       Screen 0
  4777.       Repeat 
  4778.          For Z=1 To 4
  4779.             _LENGTH=_CL-_LOST
  4780.             Ink 0,0,0
  4781.             Draw _LX/8192,_LY/8192 To(_LX-(_LXS*(_LENGTH/2)))/8192,(_LY-(_LYS*(_LENGTH/2)))/8192
  4782.             Add _LX,_LXS
  4783.             Add _LY,_LYS
  4784.             TTTX=_LX/8192
  4785.             TTTY=_LY/8192
  4786.             _CHECKCOL[TTTX,TTTY]
  4787.             HITPL=Param-1
  4788.             If HITPL<>-1
  4789.                Inc _LOST
  4790.                _LOOSEHEALTH[HITPL,50]
  4791.             End If 
  4792.             FP= Extension_12_0470(TTTX,TTTY)
  4793.             If FP>0
  4794.                Inc _LOST
  4795.                _MINX=Min(_MINX,TTTX)
  4796.                _MAXX=Max(_MAXX,TTTX)
  4797.                _MAXY=Max(_MAXY,TTTY)
  4798.             End If 
  4799.             If TTTY<0
  4800.                _LOST=100
  4801.             End If 
  4802.             Add SPN,1,0 To 19
  4803.             If SPN=0
  4804.                Inc _LOST
  4805.             End If 
  4806.             If _CL<100
  4807.                Add _CL,2
  4808.             End If 
  4809.             If TTTX<0
  4810.                _HITLEFT=1
  4811.             Else 
  4812.                _HITLEFT=0
  4813.             End If 
  4814.             If TTTX>959
  4815.                _HITRIGHT=1
  4816.             Else 
  4817.                _HITRIGHT=0
  4818.             End If 
  4819.             If _EDGETYPE=0
  4820.                If _HITLEFT=1
  4821.                   Add _LX,7864320
  4822.                End If 
  4823.                If _HITRIGHT=1
  4824.                   Add _LX,-7864320
  4825.                End If 
  4826.             End If 
  4827.             If _EDGETYPE=1
  4828.                If _HITLEFT=1
  4829.                   _LX=0
  4830.                   _LXS=Abs(_LXS/2)
  4831.                   _PLAYSAMP[2]
  4832.                End If 
  4833.                If _HITRIGHT=1
  4834.                   _LX=7856128
  4835.                   _LXS=-Abs(_LXS/2)
  4836.                   _PLAYSAMP[2]
  4837.                End If 
  4838.             End If 
  4839.             If _EDGETYPE=2
  4840.                If _HITLEFT=1 or _HITRIGHT=1
  4841.                   _LOST=100
  4842.                End If 
  4843.             End If 
  4844.             If _EDGETYPE=3
  4845.                If _HITLEFT=1
  4846.                   _LX=0
  4847.                   _LXS=Abs(_LXS)
  4848.                   _PLAYSAMP[2]
  4849.                End If 
  4850.                If _HITRIGHT=1
  4851.                   _LX=7856128
  4852.                   _LXS=-Abs(_LXS)
  4853.                   _PLAYSAMP[2]
  4854.                End If 
  4855.             End If 
  4856.             _LENGTH=_CL-_LOST
  4857.             If _LENGTH<=0
  4858.                Z=10
  4859.                _LENGTH=0
  4860.             End If 
  4861.          Next 
  4862.          Ink 8,0,0
  4863.          Draw _LX/8192,_LY/8192 To(_LX-(_LXS*(_LENGTH/2)))/8192,(_LY-(_LYS*(_LENGTH/2)))/8192
  4864.          _UPDATESCREEN[_LX/8192,_LY/8192]
  4865.       Until _LENGTH<=0
  4866.        Extension_12_0394 _LX/8192,_LY/8192,0
  4867.       Colour 8,_C
  4868.       If _MAXX>_MINX
  4869.          Repeat 
  4870.             _UPDATESCREEN[(_MINX+_MAXX)/2,_MAXY-100]
  4871.          Until Param<>1
  4872.          If _TYPE=2
  4873.             _TYPE=-1
  4874.             _FALL[_MINX,0,_MAXX,_MAXY]
  4875.             _TYPE=2
  4876.          Else 
  4877.             _FALL[_MINX,0,_MAXX,_MAXY]
  4878.          End If 
  4879.       End If 
  4880.    End If 
  4881.    If _PLWP=26
  4882.       _BT(0)=-7
  4883.       _BX(0)=_PLX(PL)*8192
  4884.       _BY(0)=(_PLY(PL)-6)*8192
  4885.       _BXS(0)=_TXS
  4886.       _BYS(0)=_TYS
  4887.    End If 
  4888.    If _PLWP=27
  4889.       _BT(0)=-8
  4890.       _BX(0)=_PLX(PL)*8192
  4891.       _BY(0)=(_PLY(PL)-6)*8192
  4892.       _BXS(0)=_TXS
  4893.       _BYS(0)=_TYS
  4894.    End If 
  4895.    If _PLWP=28
  4896.       _BT(0)=22
  4897.       _BX(0)=_PLX(PL)*8192
  4898.       _BY(0)=(_PLY(PL)-6)*8192
  4899.       _BXS(0)=_TXS
  4900.       _BYS(0)=_TYS
  4901.    End If 
  4902.    If _PLWP=29
  4903.       _BT(0)=24
  4904.       _BX(0)=_PLX(PL)*8192
  4905.       _BY(0)=(_PLY(PL)-6)*8192
  4906.       _BXS(0)=_TXS
  4907.       _BYS(0)=_TYS
  4908.    End If 
  4909.    If _PLWP=30
  4910.       _BT(0)=25
  4911.       _BX(0)=_PLX(PL)*8192
  4912.       _BY(0)=(_PLY(PL)-6)*8192
  4913.       _BXS(0)=_TXS
  4914.       _BYS(0)=_TYS
  4915.    End If 
  4916.    If _PLWP=31
  4917.       _BT(0)=26
  4918.       _BX(0)=_PLX(PL)*8192
  4919.       _BY(0)=(_PLY(PL)-6)*8192
  4920.       _BXS(0)=_TXS
  4921.       _BYS(0)=_TYS
  4922.    End If 
  4923.    If _PLWP=32
  4924.       _BT(0)=27
  4925.       _BX(0)=_PLX(PL)*8192
  4926.       _BY(0)=(_PLY(PL)-6)*8192
  4927.       _BXS(0)=_TXS
  4928.       _BYS(0)=_TYS
  4929.    End If 
  4930.    If _PLWP=34
  4931.       _BT(0)=28
  4932.       _BX(0)=_PLX(PL)*8192
  4933.       _BY(0)=(_PLY(PL)-6)*8192
  4934.       _BXS(0)=_TXS
  4935.       _BYS(0)=_TYS
  4936.    End If 
  4937.    If _PLWP=35
  4938.       _BT(0)=6
  4939.       _BX(0)=_PLX(PL)*8192
  4940.       _BY(0)=(_PLY(PL)-6)*8192
  4941.       _BXS(0)=_TXS
  4942.       _BYS(0)=_TYS
  4943.       _BIG=1
  4944.    Else 
  4945.       _BIG=0
  4946.    End If 
  4947.    If _PLWP=36
  4948.       _BT(0)=29
  4949.       _BX(0)=_PLX(PL)*8192
  4950.       _BY(0)=(_PLY(PL)-6)*8192
  4951.       _BXS(0)=_TXS
  4952.       _BYS(0)=_TYS
  4953.    End If 
  4954.    If _PLWP=37
  4955.       _BT(0)=30
  4956.       _BX(0)=_PLX(PL)*8192
  4957.       _BY(0)=(_PLY(PL)-6)*8192
  4958.       _BXS(0)=_TXS
  4959.       _BYS(0)=_TYS
  4960.    End If 
  4961.    If _PLWP=38
  4962.       _BT(0)=31
  4963.       _BX(0)=_PLX(PL)*8192
  4964.       _BY(0)=(_PLY(PL)-6)*8192
  4965.       _BXS(0)=_TXS
  4966.       _BYS(0)=_TYS
  4967.    End If 
  4968.    If _PLWP=39
  4969.       _BT(0)=32
  4970.       _BX(0)=_PLX(PL)*8192
  4971.       _BY(0)=(_PLY(PL)-6)*8192
  4972.       _BXS(0)=_TXS
  4973.       _BYS(0)=_TYS
  4974.    End If 
  4975.    If _PLWP=40
  4976.       _BT(0)=33
  4977.       _BX(0)=_PLX(PL)*8192
  4978.       _BY(0)=(_PLY(PL)-6)*8192
  4979.       _BXS(0)=_TXS
  4980.       _BYS(0)=_TYS
  4981.    End If 
  4982.    If _PLWP=41
  4983.       _BT(0)=34
  4984.       _BX(0)=_PLX(PL)*8192
  4985.       _BY(0)=(_PLY(PL)-6)*8192
  4986.       _BXS(0)=_TXS
  4987.       _BYS(0)=_TYS
  4988.    End If 
  4989.    If _PLWP=42
  4990.       _BT(0)=35
  4991.       _BX(0)=_PLX(PL)*8192
  4992.       _BY(0)=(_PLY(PL)-6)*8192
  4993.       _BXS(0)=_TXS
  4994.       _BYS(0)=_TYS
  4995.    End If 
  4996.    If _PLWP=43
  4997.       _BT(0)=36
  4998.       _BX(0)=_PLX(PL)*8192
  4999.       _BY(0)=(_PLY(PL)-6)*8192
  5000.       _BXS(0)=_TXS
  5001.       _BYS(0)=_TYS
  5002.    End If 
  5003.    If _PLWP=44
  5004.       _BT(0)=37
  5005.       _BX(0)=_PLX(PL)*8192
  5006.       _BY(0)=(_PLY(PL)-6)*8192
  5007.       _BXS(0)=_TXS
  5008.       _BYS(0)=_TYS
  5009.    End If 
  5010.    Screen 0
  5011.    _SELECTCOLOUR
  5012.    _CRF=0
  5013.    _DAMN=0
  5014.    If _SKIP=0
  5015.       _PLAYSAMP[10]
  5016.       Repeat 
  5017.          Inc _CRF
  5018.          If Rnd(200)=1
  5019.             _PLAYSAMP[1]
  5020.          End If 
  5021.          AX=0
  5022.          AY=0
  5023.          N=0
  5024.          For Z=0 To 9
  5025.             If _BT(Z)<>0 and _BT(Z)<>18 and _BT(Z)<>19 and _BT(Z)<>23
  5026.                Inc N
  5027.                TX=_BX(Z)/8192
  5028.                TY=_BY(Z)/8192
  5029.                If _SKIPVBL=0
  5030.                   If _BT(Z)=7
  5031.                       Extension_12_0394 TX,TY,1
  5032.                       Extension_12_0394 TX+1,TY,1
  5033.                       Extension_12_0394 TX,TY+1,1
  5034.                       Extension_12_0394 TX+1,TY+1,1
  5035.                   Else 
  5036.                       Extension_12_0394 TX,TY,0
  5037.                       Extension_12_0394 TX+1,TY,0
  5038.                       Extension_12_0394 TX,TY+1,0
  5039.                       Extension_12_0394 TX+1,TY+1,0
  5040.                   End If 
  5041.                End If 
  5042.                Add _BXS(Z),_WIND*4
  5043.                If _BX(Z)<0
  5044.                   _HITLEFT=1
  5045.                Else 
  5046.                   _HITLEFT=0
  5047.                End If 
  5048.                If _BX(Z)>7856128
  5049.                   _HITRIGHT=1
  5050.                Else 
  5051.                   _HITRIGHT=0
  5052.                End If 
  5053.                If _EDGETYPE=0
  5054.                   If _HITLEFT=1
  5055.                      Add _BX(Z),7864320
  5056.                   End If 
  5057.                   If _HITRIGHT=1
  5058.                      Add _BX(Z),-7864320
  5059.                   End If 
  5060.                End If 
  5061.                If _EDGETYPE=1
  5062.                   If _HITLEFT=1
  5063.                      _BX(Z)=0
  5064.                      _BXS(Z)=Abs(_BXS(Z)/2)
  5065.                      _PLAYSAMP[2]
  5066.                   End If 
  5067.                   If _HITRIGHT=1
  5068.                      _BX(Z)=7856128
  5069.                      _BXS(Z)=-Abs(_BXS(Z)/2)
  5070.                      _PLAYSAMP[2]
  5071.                   End If 
  5072.                End If 
  5073.                If _EDGETYPE=2
  5074.                   If _HITLEFT=1 or _HITRIGHT=1
  5075.                      _BT(Z)=0
  5076.                      _DAMN=1
  5077.                   End If 
  5078.                End If 
  5079.                If _EDGETYPE=3
  5080.                   If _HITLEFT=1
  5081.                      _BX(Z)=0
  5082.                      _BXS(Z)=Abs(_BXS(Z))
  5083.                      _PLAYSAMP[2]
  5084.                   End If 
  5085.                   If _HITRIGHT=1
  5086.                      _BX(Z)=7856128
  5087.                      _BXS(Z)=-Abs(_BXS(Z))
  5088.                      _PLAYSAMP[2]
  5089.                   End If 
  5090.                End If 
  5091.                If _BT(Z)=8
  5092.                   TTX=(_BX(Z)/131072)*16
  5093.                   For TP=0 To 6
  5094.                      If _PLHEALTH(TP)=>0
  5095.                         If TP<>PL
  5096.                            If TTX=(_PLX(TP)/16)*16
  5097.                               Add _BXS(Z),-Min(4096,Max(-4096,_BXS(Z)))
  5098.                               TP=7
  5099.                            End If 
  5100.                         End If 
  5101.                      End If 
  5102.                   Next 
  5103.                End If 
  5104.                TTX=(_BX(Z)/262144)*32
  5105.                For TP=0 To 6
  5106.                   If _PLSHIELDTYPE(TP)=3
  5107.                      If TP<>PL
  5108.                         If TTX=(_PLX(TP)/32)*32
  5109.                            Add _BYS(Z),-131072/Max(1,_PLY(TP)-TY)
  5110.                            Add _BXS(Z),Rnd(8192)-4096
  5111.                            TP=7
  5112.                         End If 
  5113.                      End If 
  5114.                   End If 
  5115.                Next 
  5116.                Add _BX(Z),_BXS(Z)
  5117.                Add _BY(Z),_BYS(Z)
  5118.                If _BT(Z)=7
  5119.                   Add _BYS(Z),-_GRAVITY
  5120.                Else 
  5121.                   Add _BYS(Z),_GRAVITY
  5122.                End If 
  5123.                If _BT(Z)<0
  5124.                   If _CRF>50
  5125.                      If _BT(Z)=-1
  5126.                         _NUM=5
  5127.                         _TY=1
  5128.                      End If 
  5129.                      If _BT(Z)=-2
  5130.                         _NUM=10
  5131.                         _TY=1
  5132.                      End If 
  5133.                      If _BT(Z)=-3
  5134.                         _NUM=5
  5135.                         _TY=3
  5136.                      End If 
  5137.                      If _BT(Z)=-4
  5138.                         _NUM=5
  5139.                         _TY=4
  5140.                      End If 
  5141.                      If _BT(Z)=-5
  5142.                         _NUM=5
  5143.                         _TY=5
  5144.                      End If 
  5145.                      If _BT(Z)=-6
  5146.                         _NUM=10
  5147.                         _TY=5
  5148.                      End If 
  5149.                      If _BT(Z)=-7
  5150.                         _NUM=5
  5151.                         _TY=14
  5152.                      End If 
  5153.                      If _BT(Z)=-8
  5154.                         _NUM=10
  5155.                         _TY=14
  5156.                      End If 
  5157.                      For TT=0 To _NUM-1
  5158.                         _BX(TT)=_BX(0)
  5159.                         _BY(TT)=_BY(0)
  5160.                         _BXS(TT)=Rnd(65536)-32768
  5161.                         _BYS(TT)=Rnd(65536)-32768
  5162.                         _BT(TT)=_TY
  5163.                      Next 
  5164.                      _PLAYSAMP[4]
  5165.                   End If 
  5166.                End If 
  5167.                TX=_BX(Z)/8192
  5168.                TY=_BY(Z)/8192
  5169.                If _BT(Z)=6
  5170.                   If Extension_12_0470(TX,TY)>0 or Extension_12_0470(TX+1,TY+1)>0
  5171.                      _BT(Z)=7
  5172.                   End If 
  5173.                End If 
  5174.                If _BT(Z)=7
  5175.                   If Extension_12_0470(TX,TY)=0 and Extension_12_0470(TX+1,TY+1)=0
  5176.                      If _BIG=1
  5177.                         _ADDEXPLOSION[Z,TX,TY,-30,0]
  5178.                      Else 
  5179.                         _ADDEXPLOSION[Z,TX,TY,30,0]
  5180.                      End If 
  5181.                      _BT(Z)=0
  5182.                   End If 
  5183.                End If 
  5184.                If _BT(Z)<>0
  5185.                   If Z=0
  5186.                      _CHECKCOL[TX,TY]
  5187.                      _VTMP=Param
  5188.                   Else 
  5189.                      _VTMP=0
  5190.                   End If 
  5191.                   If _BT(Z)<>6 and _BT(Z)<>7
  5192.                      A= Extension_12_0470(TX,TY)
  5193.                      B= Extension_12_0470(TX+1,TY+1)
  5194.                      If(A>0 and A<8) or(B>0 and B<8) or TY>511 or _VTMP<>0
  5195.                         If _BT(Z)=37
  5196.                            _BT(0)=0
  5197.                            _DAMN=1
  5198.                            _FLASH
  5199.                            For Z=0 To 6
  5200.                               TX=_PLX(Z)-8-_OFX
  5201.                               TY=_PLY(Z)-13-_OFY
  5202.                               If TX>-16 and TX<319 and TY>-16 and TY<_HEIGHT-1 and _PLALIVE(Z)>0
  5203.                                  _LOOSEHEALTH[Z,150]
  5204.                               End If 
  5205.                            Next 
  5206.                            Wait 50
  5207.                         Else 
  5208.                            If _BT(Z)=35 or _BT(Z)=36
  5209.                               Add _BX(Z),-_BXS(Z)
  5210.                               Add _BY(Z),-_BYS(Z)
  5211.                               TX=_BX(Z)/8192
  5212.                               TY=_BY(Z)/8192
  5213.                               _BYS(Z)=-_BYS(Z)
  5214.                               Add _BT(Z),-33
  5215.                               _PLAYSAMP[14]
  5216.                            Else 
  5217.                               If _BT(Z)=31 or _BT(Z)=32 or _BT(Z)=33 or _BT(Z)=34
  5218.                                  _FLOOD[_BT(Z),TX,TY]
  5219.                                  _BT(0)=0
  5220.                                  _DAMN=1
  5221.                               Else 
  5222.                                  If _BT(Z)=26
  5223.                                     _PLAYSAMP[11]
  5224.                                     _BT(0)=0
  5225.                                     _DAMN=1
  5226.                                     Screen 0
  5227.                                     Palette ,,,,,,,,,$F00,$F20,$F40,$F80,$FA0,$FC0,$FE0
  5228.                                     Shift Up 1,9,15,1
  5229.                                     _COLOUR=9
  5230.                                     For Y=0 To 511
  5231.                                        Ink _COLOUR,0,0
  5232.                                        Add _COLOUR,1,9 To 15
  5233.                                        Draw(_BX(0)/8192)-32,Y To(_BX(0)/8192)+32,Y
  5234.                                     Next 
  5235.                                     If _TYPE<>-1 and _SKIPVBL=0
  5236.                                        Wait 50
  5237.                                     End If 
  5238.                                     Ink 0,0,0
  5239.                                     For Y=0 To 511
  5240.                                        Draw(_BX(0)/8192)-32,Y To(_BX(0)/8192)+32,Y
  5241.                                     Next 
  5242.                                     Shift Off 
  5243.                                  Else 
  5244.                                     If _BT(Z)=10 or _BT(Z)=11
  5245.                                        _PLAYSAMP[2]
  5246.                                        _ADDEXPLOSION[_BT(Z)-9,TX,TY,30,0]
  5247.                                        Inc _BT(Z)
  5248.                                        _BYS(Z)=-Abs(_BYS(Z)/2)
  5249.                                     Else 
  5250.                                        If _BT(Z)=9 or _BT(Z)=24 or _BT(Z)=25 or _BT(Z)=27 or _BT(Z)=28 or _BT(Z)=29 or _BT(Z)=30
  5251.                                           LW=0
  5252.                                           If _BT(Z)=9
  5253.                                              _NUM=7
  5254.                                              _TY=1
  5255.                                           End If 
  5256.                                           If _BT(Z)=24
  5257.                                              _NUM=9
  5258.                                              _TY=2
  5259.                                           End If 
  5260.                                           If _BT(Z)=25
  5261.                                              _NUM=9
  5262.                                              _TY=3
  5263.                                           End If 
  5264.                                           If _BT(Z)=27
  5265.                                              _NUM=5
  5266.                                              _TY=14
  5267.                                              LW=1
  5268.                                           End If 
  5269.                                           If _BT(Z)=28
  5270.                                              _NUM=5
  5271.                                              _TY=4
  5272.                                              LW=1
  5273.                                           End If 
  5274.                                           If _BT(Z)=29
  5275.                                              _NUM=4
  5276.                                              _TY=3
  5277.                                              _ADDEXPLOSION[Z,TX,TY,-30,0]
  5278.                                              _BT(0)=0
  5279.                                              LW=2
  5280.                                           End If 
  5281.                                           If _BT(Z)=30
  5282.                                              _NUM=4
  5283.                                              _TY=4
  5284.                                              _ADDEXPLOSION[Z,TX,TY,-50,0]
  5285.                                              _BT(0)=0
  5286.                                              LW=2
  5287.                                           End If 
  5288.                                           For Z=0 To _NUM
  5289.                                              _BX(Z)=_BX(0)
  5290.                                              _BY(Z)=_BY(0)
  5291.                                              If LW=1
  5292.                                                 _BXS(Z)=_BXS(0)
  5293.                                                 _BYS(Z)=_BYS(0)
  5294.                                              Else 
  5295.                                                 If LW=2
  5296.                                                    If Z<>0
  5297.                                                       _BYS(Z)=0
  5298.                                                       If Z<3
  5299.                                                          _BXS(Z)=-65536
  5300.                                                       Else 
  5301.                                                          _BXS(Z)=65536
  5302.                                                       End If 
  5303.                                                    End If 
  5304.                                                 Else 
  5305.                                                    _BXS(Z)=Rnd(32768)-16384
  5306.                                                    _BYS(Z)=-Rnd(65536)
  5307.                                                 End If 
  5308.                                              End If 
  5309.                                              If LW=2
  5310.                                                 If Z<>0
  5311.                                                    _BT(Z)=_TY
  5312.                                                 End If 
  5313.                                              Else 
  5314.                                                 _BT(Z)=_TY
  5315.                                              End If 
  5316.                                           Next 
  5317.                                        Else 
  5318.                                           ' do explosion 
  5319.                                           If _BT(Z)<0
  5320.                                              _ADDEXPLOSION[Z,TX,TY,30,0]
  5321.                                           End If 
  5322.                                           If _BT(Z)=1 or _BT(Z)=8
  5323.                                              _ADDEXPLOSION[Z,TX,TY,15,0]
  5324.                                           End If 
  5325.                                           If _BT(Z)=2 or _BT(Z)=12
  5326.                                              _ADDEXPLOSION[Z,TX,TY,30,0]
  5327.                                           End If 
  5328.                                           If _BT(Z)=3
  5329.                                              _ADDEXPLOSION[Z,TX,TY,-30,0]
  5330.                                           End If 
  5331.                                           If _BT(Z)=4
  5332.                                              _ADDEXPLOSION[Z,TX,TY,-50,0]
  5333.                                           End If 
  5334.                                           If _BT(Z)=5
  5335.                                              _ADDEXPLOSION[Z,TX,TY,-70,0]
  5336.                                           End If 
  5337.                                           If _BT(Z)=13
  5338.                                              _ADDEXPLOSION[Z,TX,TY,30,1]
  5339.                                           End If 
  5340.                                           If _BT(Z)=14
  5341.                                              _ADDEXPLOSION[Z,TX,TY,50,1]
  5342.                                           End If 
  5343.                                           If _BT(Z)=15
  5344.                                              _ADDDIRT[Z,TX,TY]
  5345.                                              _DIRT=1
  5346.                                           End If 
  5347.                                           If _BT(Z)=16 or _BT(Z)=17
  5348.                                              Add _BT(Z),2
  5349.                                           Else 
  5350.                                              If _BT(Z)=22
  5351.                                                 Inc _BT(Z)
  5352.                                              Else 
  5353.                                                 _BT(Z)=0
  5354.                                              End If 
  5355.                                           End If 
  5356.                                        End If 
  5357.                                     End If 
  5358.                                  End If 
  5359.                               End If 
  5360.                            End If 
  5361.                         End If 
  5362.                      Else 
  5363.                         If _SKIPVBL=0
  5364.                             Extension_12_0394 TX,TY,8
  5365.                             Extension_12_0394 TX+1,TY,8
  5366.                             Extension_12_0394 TX,TY+1,8
  5367.                             Extension_12_0394 TX+1,TY+1,8
  5368.                         End If 
  5369.                      End If 
  5370.                   Else 
  5371.                      If _SKIPVBL=0
  5372.                          Extension_12_0394 TX,TY,8
  5373.                          Extension_12_0394 TX+1,TY,8
  5374.                          Extension_12_0394 TX,TY+1,8
  5375.                          Extension_12_0394 TX+1,TY+1,8
  5376.                      End If 
  5377.                   End If 
  5378.                End If 
  5379.                Add AX,TX
  5380.                Add AY,TY
  5381.             End If 
  5382.          Next 
  5383.          If N>0
  5384.             _UPDATESCREEN[AX/N,AY/N]
  5385.          End If 
  5386.       Until N=0
  5387.    End If 
  5388.    If _BT(0)=18 or _BT(0)=19 or _BT(0)=23
  5389.       If _BT(0)=23
  5390.          _ROLLER[_BX(0)/8192,_BY(0)/8192,2]
  5391.       Else 
  5392.          _ROLLER[_BX(0)/8192,_BY(0)/8192,_BT(0)-18]
  5393.       End If 
  5394.    End If 
  5395.    If _PLWP=23 and _DAMN=0
  5396.       _PLX(_FIRPL)=_BX(0)/8192
  5397.       _PLY(_FIRPL)=_BY(0)/8192
  5398.       _PLOFX(_FIRPL)=0
  5399.       _PLOFY(_FIRPL)=0
  5400.       While Extension_12_0470(_PLX(_FIRPL),_PLY(_FIRPL))<>0
  5401.          Dec _PLY(_FIRPL)
  5402.       Wend 
  5403.       _PLAYSAMP[9]
  5404.    Else 
  5405.       If _PLWP=24
  5406.          If _DAMN=0
  5407.             _REALLIGHTNING[_BX(0)/8192]
  5408.          End If 
  5409.       Else 
  5410.          If _DAMN=0 and _TYPE<>-1 and _SKIPVBL=0
  5411.             Wait 50
  5412.          End If 
  5413.          Wait Vbl 
  5414.          If _DIRT=1
  5415.             _FORCEDROP=1
  5416.          End If 
  5417.          _REMOVEEXPLOSIONS
  5418.       End If 
  5419.       Inc _PLFIRED(PL)
  5420.       If _HIT=1
  5421.          Inc _PLHIT(PL)
  5422.       End If 
  5423.    End If 
  5424.    _REMOVESHOOT
  5425. End Proc
  5426.  
  5427. Procedure _CALCULATEHITPOS[LX,LY,ANGLE,POWER]
  5428.    Screen 0
  5429.    _DONE=0
  5430.    _HITX=-10000
  5431.    _HITY=-10000
  5432.    _BX=LX*8192
  5433.    _BY=(LY-6)*8192
  5434.    _BXS=Cos(ANGLE-90)*POWER*100
  5435.    _BYS=Sin(ANGLE-90)*POWER*100
  5436.    Repeat 
  5437.       Add _BXS,_WIND*4
  5438.       If _BX<0
  5439.          _HITLEFT=1
  5440.       Else 
  5441.          _HITLEFT=0
  5442.       End If 
  5443.       If _BX>7856128
  5444.          _HITRIGHT=1
  5445.       Else 
  5446.          _HITRIGHT=0
  5447.       End If 
  5448.       If _EDGETYPE=0
  5449.          If _HITLEFT=1
  5450.             Add _BX,7864320
  5451.          End If 
  5452.          If _HITRIGHT=1
  5453.             Add _BX,-7864320
  5454.          End If 
  5455.       End If 
  5456.       If _EDGETYPE=1
  5457.          If _HITLEFT=1
  5458.             _BX=0
  5459.             _BXS=Abs(_BXS/2)
  5460.          End If 
  5461.          If _HITRIGHT=1
  5462.             _BX=7856128
  5463.             _BXS=-Abs(_BXS/2)
  5464.          End If 
  5465.       End If 
  5466.       If _EDGETYPE=2
  5467.          If _HITLEFT=1 or _HITRIGHT=1
  5468.             _DONE=1
  5469.          End If 
  5470.       End If 
  5471.       If _EDGETYPE=3
  5472.          If _HITLEFT=1
  5473.             _BX=0
  5474.             _BXS=Abs(_BXS)
  5475.          End If 
  5476.          If _HITRIGHT=1
  5477.             _BX=7856128
  5478.             _BXS=-Abs(_BXS)
  5479.          End If 
  5480.       End If 
  5481.       Add _BX,_BXS
  5482.       Add _BY,_BYS
  5483.       Add _BYS,_GRAVITY
  5484.       TX=_BX/8192
  5485.       TY=_BY/8192
  5486.       _CHECKCOL[TX,TY]
  5487.       A= Extension_12_0470(TX,TY)
  5488.       B= Extension_12_0470(TX+1,TY+1)
  5489.       If(A>0 and A<8) or(B>0 and B<8) or TY>511 or Param<>0
  5490.          _HITX=TX
  5491.          _HITY=TY
  5492.          _DONE=1
  5493.       End If 
  5494.    Until _DONE=1
  5495. End Proc
  5496.  
  5497. Procedure _EVALUATEHEALTH[SX,SY,FPL]
  5498.    _TOTALLOST=0
  5499.    For Z=0 To 6
  5500.       If Z<>FPL and _PLALIVE(Z)>0
  5501.          _WORKOUTHEALTHLOSS[SX,SY,_PLX(Z),_PLY(Z),80]
  5502.          Add _TOTALLOST,Param
  5503.       End If 
  5504.    Next 
  5505. End Proc[_TOTALLOST]
  5506.  
  5507. Procedure _ADDCOMPINFO[PL]
  5508.    Screen Open 2,320,13,16,Lowres
  5509.    Screen Hide 2
  5510.    Curs Off 
  5511.    Flash Off 
  5512.    Screen Copy 1,0,271,320,283 To 2,0,0
  5513.    Get Palette 1
  5514.    Palette ,,,,,,,,$0,$F0,$F,$FF0,$F00,$F0F,$FF,$F70
  5515.    Screen 2
  5516.    _DOSTAR[7,6,PL]
  5517.    _DOTEXT[10,4,_PLNAME$(PL),1]
  5518.    For _HEIGHT=256 To 242 Step -1
  5519.       If 255-_HEIGHT>1
  5520.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,255-_HEIGHT
  5521.          Screen Show 2
  5522.          Screen To Front 2
  5523.       End If 
  5524.       _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  5525.    Next 
  5526.    _HEIGHT=242
  5527.    Repeat 
  5528.       _UPDATESCREEN[_PLX(PL),_PLY(PL)]
  5529.    Until Param<>1
  5530. End Proc
  5531.  
  5532. Procedure _REMOVECOMPINFO
  5533.    For _HEIGHT=242 To 256 Step 1
  5534.       If 255-_HEIGHT>1
  5535.          Screen Display 2,128,43+_HEIGHT-(_NTSC*56),320,255-_HEIGHT
  5536.          Screen Show 2
  5537.          Screen To Front 2
  5538.       End If 
  5539.       _UPDATESCREEN[_OFX+160,_OFY+((_HEIGHT-(_NTSC*56))/2)]
  5540.    Next 
  5541.    _HEIGHT=256
  5542.    Screen Close 2
  5543. End Proc
  5544.  
  5545. Procedure _UPDATEDONE[_DONE]
  5546.    _DONE=(_DONE*100)/(_IQ/3)
  5547.    Screen 2
  5548.    Ink 7,0,0
  5549.    Bar 314-_DONE,3 To 315,8
  5550. End Proc
  5551.  
  5552. Procedure _DOTEXT4[X,Y,TXT$,C]
  5553.    If Len(TXT$)>0
  5554.       Bank Swap 1,2
  5555.       TXT$=Upper$(TXT$)
  5556.       _AD=(C*59)-31
  5557.       For Z=1 To Len(TXT$)
  5558.          N=Asc(Mid$(TXT$,Z,1))
  5559.          If N>32
  5560.             Paste Bob X+((Z-1)*4),Y,N+_AD
  5561.          End If 
  5562.       Next 
  5563.       Bank Swap 1,2
  5564.    End If 
  5565. End Proc
  5566.  
  5567. Procedure _DOMESSAGE[TXT1$,TXT2$]
  5568.    S=Screen
  5569.    Screen 5
  5570.     Extension_18_0A50 200
  5571.    Screen Copy 5,50,257,270,269 To 5,50,138
  5572.    _DOTEXT4[160-(Len(TXT1$)*2),138,TXT1$,1]
  5573.    _DOTEXT4[160-(Len(TXT2$)*2),144,TXT2$,0]
  5574.    Screen S
  5575. End Proc
  5576.  
  5577. Procedure _UPDATE_MOUSEPOINTER[M,_STATE]
  5578.    _CHECKTUNE
  5579.    Led Off 
  5580.    If Rnd(200)=1
  5581.       _PLAYSAMP[1]
  5582.    End If 
  5583.    If _TIME=2
  5584.       If Rnd(500)=1
  5585.          Screen 0
  5586.          _LIGHTNING
  5587.          Screen 1
  5588.       End If 
  5589.    End If 
  5590.    Screen 1
  5591.    X=X Screen(X Mouse)
  5592.    Y=Y Screen(Y Mouse)
  5593.    If M>0
  5594.       If _STATE=1
  5595.          Bob 1,X,Y,486+62
  5596.       Else 
  5597.          Bob 1,X,Y,485+62
  5598.       End If 
  5599.    Else 
  5600.       Bob 1,X-3,Y-3,487+62
  5601.    End If 
  5602.    Bob Update 
  5603. End Proc
  5604.  
  5605. Procedure _MOUSESTUFF[_STATE]
  5606.    Screen 1
  5607.    M=Mouse Zone
  5608.    _UPDATE_MOUSEPOINTER[M,_STATE]
  5609. End Proc[M]
  5610.  
  5611. Procedure _UPDATE_HELP
  5612.    Screen 1
  5613.    M=Mouse Zone
  5614.    MX=X Screen(X Mouse)
  5615.    MY=Y Screen(Y Mouse)
  5616.    If M=0
  5617.       If MX>=205 and MY>=26 and MX<=314 and MY<=42
  5618.          M=8
  5619.       Else 
  5620.          If MX>=6 and MY>=6 and MX<=39 and MY<=11
  5621.             M=9
  5622.          Else 
  5623.             If MX>=40 and MY>=6 and MX<=129 and MY<=12
  5624.                M=10
  5625.             Else 
  5626.                If MX>=6 and MY>=15 and MX<=45 and MY<=20
  5627.                   M=11
  5628.                Else 
  5629.                   If MX>=47 and MY>=15 and MX<=87 and MY<=21
  5630.                      M=12
  5631.                   Else 
  5632.                      If MX>=89 and MY>=16 and MX<=138 and MY<=21
  5633.                         M=13
  5634.                      Else 
  5635.                         If MX>=6 and MY>=34 and MX<=121 and MY<=41
  5636.                            M=14
  5637.                         End If 
  5638.                      End If 
  5639.                   End If 
  5640.                End If 
  5641.             End If 
  5642.          End If 
  5643.       End If 
  5644.       
  5645.    End If 
  5646.    If M<>_PRHELP
  5647.       If M=1 and _PREBUY=0
  5648.          A$="Click here to fire the"
  5649.          B$="selected weapon."
  5650.       Else 
  5651.          Restore _HELPDAT
  5652.          For Z=0 To M
  5653.             Read A$
  5654.             Read B$
  5655.          Next 
  5656.       End If 
  5657.       Bob Clear 
  5658.       Ink 15,0,0
  5659.       Bar 216,29 To 312,40
  5660.       _DOTEXT[217,30,A$,0]
  5661.       _DOTEXT[217,36,B$,0]
  5662.       Bob Draw 
  5663.       _PRHELP=M
  5664.    End If 
  5665.    
  5666.    '  0 = nothing 
  5667.    '  1 = fire/done 
  5668.    '  2 = power bar 
  5669.    '  3 = angle 
  5670.    '  4 = shop
  5671.    '  5 = map toggle
  5672.    '  6 = scroll
  5673.    '  7 = logo/recentre on tank 
  5674.    
  5675.    '  8 = in-game help box
  5676.    '  9 = wind  
  5677.    ' 10 = edges (specific info?)  
  5678.    ' 11 = health
  5679.    ' 12 = shield
  5680.    ' 13 = cash
  5681.    ' 14 = current weapon
  5682.    
  5683.    _HELPDAT:
  5684.    Data ""
  5685.    Data ""
  5686.    
  5687.    Data "Click here when you're"
  5688.    Data "ready to continue."
  5689.    
  5690.    Data "Changes the initial"
  5691.    Data "velocity of the shell."
  5692.    
  5693.    Data "Changes the angle of"
  5694.    Data "your tank's turret."
  5695.    
  5696.    Data "Click to change weapon"
  5697.    Data "or buy defensive items."
  5698.    
  5699.    Data "Click here to toggle the"
  5700.    Data "map on and off."
  5701.    
  5702.    Data "Use the arrows to scroll"
  5703.    Data "around the map."
  5704.    
  5705.    Data "Click here to recentre"
  5706.    Data "the view on your tank."
  5707.    
  5708.    Data "In-game help."
  5709.    Data ""
  5710.    
  5711.    Data "Shows current direction"
  5712.    Data "and strength of wind."
  5713.    
  5714.    Data "Indicates current edge"
  5715.    Data "type."
  5716.    
  5717.    Data "Shows how much health"
  5718.    Data "you currently have."
  5719.    
  5720.    Data "Shows how much shielding"
  5721.    Data "you currently have left."
  5722.    
  5723.    Data "Indicates how much money"
  5724.    Data "you currently have."
  5725.    
  5726.    Data "Shows what your current"
  5727.    Data "weapon is."
  5728.    Rem **123456789012345678901234*  
  5729. End Proc
  5730.  
  5731. Procedure _ADDPOINTER[PL]
  5732.    _DROPY=0
  5733.    _DROPYS=32
  5734.    _DROPX=_PLX(PL)-4
  5735.    _DROPAY=(_PLY(PL)-20)*4
  5736. End Proc
  5737.  
  5738. Procedure _REMOVEPOINTER
  5739.    _DROPYS=-70
  5740. End Proc
  5741.  
  5742. Procedure _UPDATESCREEN_WAIT[PL]
  5743.    Repeat 
  5744.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  5745.    Until Param=0
  5746. End Proc
  5747.  
  5748. Procedure _DOINTERFACE[PL]
  5749.    If _PLHEALTH(PL)=>0 and _PLTYPE(PL)>0
  5750.       
  5751.       If _PLTYPE(PL)=1
  5752.          _SKIPVBL=0
  5753.          If BITMAPLEVEL=0
  5754.             _TYPE=_TURBOTEMP
  5755.          Else 
  5756.             _TYPE=2
  5757.          End If 
  5758.          Screen 1
  5759.          _UPDATEPOWER[PL]
  5760.          _UPDATEANGLE[PL]
  5761.          _UPDATEOTHERS[PL]
  5762.          If _PREBUY=1
  5763.             Screen Copy 1,192,161,208,177 To 1,123,25
  5764.          End If 
  5765.          _ADDPOINTER[PL]
  5766.          For _HEIGHT=256 To 207 Step -1
  5767.             _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  5768.          Next 
  5769.          _HEIGHT=207
  5770.       End If 
  5771.       
  5772.       _UPDATESCREEN_WAIT[PL]
  5773.       
  5774.       If _PLTYPE(PL)=1
  5775.          If _PLMAP(PL)=1
  5776.             _ADDMAP[PL]
  5777.          Else 
  5778.             _ADDINFO[PL]
  5779.          End If 
  5780.       End If 
  5781.       
  5782.       _FIRE=0
  5783.       _FIRPL=PL
  5784.       If _PLTYPE(PL)=1
  5785.          Repeat 
  5786.             Screen 1
  5787.             _PREVPRESS=0
  5788.             _NEEDBLANK=1
  5789.             Repeat 
  5790.                Limit Mouse 128,251-(_NTSC*56) To 447,297-(_NTSC*56)
  5791.                _MOUSESTUFF[0]
  5792.                M=Param
  5793.                _UPDATE_HELP
  5794.                _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  5795.                Screen 1
  5796.                MK=Mouse Key
  5797.                If Asc(Inkey$)=27
  5798.                   For Z=0 To 6
  5799.                      _PLHEALTH(Z)=-1
  5800.                      _PLALIVE(Z)=0
  5801.                   Next 
  5802.                   _FIRE=-1
  5803.                   _SPECIALQUIT=1
  5804.                   MK=10
  5805.                End If 
  5806.                If Key State(79)
  5807.                   Bob Off 1
  5808.                   Bob Update 
  5809.                   Wait Vbl 
  5810.                   _PLANGLE(PL)=Min(90,Max(-90,_PLANGLE(PL)-1))
  5811.                   _UPDATEANGLE[PL]
  5812.                End If 
  5813.                If Key State(78)
  5814.                   Bob Off 1
  5815.                   Bob Update 
  5816.                   Wait Vbl 
  5817.                   _PLANGLE(PL)=Min(90,Max(-90,_PLANGLE(PL)+1))
  5818.                   _UPDATEANGLE[PL]
  5819.                End If 
  5820.                If Key State(76)
  5821.                   Bob Off 1
  5822.                   Bob Update 
  5823.                   Wait Vbl 
  5824.                   _PLPOWER(PL)=Min(999,Max(0,_PLPOWER(PL)+4))
  5825.                   _UPDATEPOWER[PL]
  5826.                End If 
  5827.                If Key State(77)
  5828.                   Bob Off 1
  5829.                   Bob Update 
  5830.                   Wait Vbl 
  5831.                   _PLPOWER(PL)=Min(999,Max(0,_PLPOWER(PL)-4))
  5832.                   _UPDATEPOWER[PL]
  5833.                End If 
  5834.                If _PREBUY=1
  5835.                   If Key State(68) or Key State(64)
  5836.                      _FIRE=-1
  5837.                      MK=10
  5838.                   End If 
  5839.                Else 
  5840.                   If Key State(68) or Key State(64)
  5841.                      If _WEAPCOST(_PLWEAP(PL))<=_PLCASH(PL)
  5842.                         MK=10
  5843.                         _FIRE=1
  5844.                         Add _PLCASH(PL),-_WEAPCOST(_PLWEAP(PL))
  5845.                      Else 
  5846.                         _PLAYSAMP[8]
  5847.                      End If 
  5848.                   End If 
  5849.                End If 
  5850.                If Key State(55)
  5851.                   If _PLMAP(PL)=0
  5852.                      _REMOVEINFO[PL]
  5853.                      _ADDMAP[PL]
  5854.                      _PLMAP(PL)=1
  5855.                   Else 
  5856.                      _REMOVEMAP[PL]
  5857.                      _ADDINFO[PL]
  5858.                      _PLMAP(PL)=0
  5859.                   End If 
  5860.                End If 
  5861.                _REDO=0
  5862.                If Key State(45)
  5863.                   Add _PLOFX(PL),-4
  5864.                   _REDO=1
  5865.                End If 
  5866.                If Key State(62)
  5867.                   Add _PLOFY(PL),-4
  5868.                   _REDO=1
  5869.                End If 
  5870.                If Key State(47)
  5871.                   Add _PLOFX(PL),4
  5872.                   _REDO=1
  5873.                End If 
  5874.                If Key State(30)
  5875.                   Add _PLOFY(PL),4
  5876.                   _REDO=1
  5877.                End If 
  5878.                If M=6 and MK=1
  5879.                   MK=0
  5880.                   X=Min(1,Max(-1,(((X Screen(X Mouse)-169)*3)/32)-1))
  5881.                   Y=Min(1,Max(-1,(((Y Screen(Y Mouse)-7)*3)/32)-1))
  5882.                   If X=0 and Y=0
  5883.                      _NEEDBLANK=0
  5884.                   Else 
  5885.                      _NEEDBLANK=1
  5886.                      _REDO=1
  5887.                   End If 
  5888.                   Add _PLOFX(PL),X*4
  5889.                   Add _PLOFY(PL),Y*4
  5890.                   Bob Clear 
  5891.                   Screen Copy 1,170,8+285,201,39+285 To 1,170,8
  5892.                   If Y<0
  5893.                      ' Up 
  5894.                      Screen Copy 1,276,152,289,165 To 1,179,8
  5895.                   End If 
  5896.                   If X<0
  5897.                      ' Left 
  5898.                      Screen Copy 1,267,161,280,174 To 1,170,17
  5899.                   End If 
  5900.                   If Y>0
  5901.                      ' Down 
  5902.                      Screen Copy 1,276,170,289,183 To 1,179,26
  5903.                   End If 
  5904.                   If X>0
  5905.                      ' Right  
  5906.                      Screen Copy 1,285,161,298,174 To 1,188,17
  5907.                   End If 
  5908.                   Bob Draw 
  5909.                Else 
  5910.                   If _NEEDBLANK=1
  5911.                      Bob Clear 
  5912.                      Screen Copy 1,170,8+285,201,39+285 To 1,170,8
  5913.                      Bob Draw 
  5914.                      _NEEDBLANK=0
  5915.                   End If 
  5916.                End If 
  5917.                If Key State(46)
  5918.                   _PLOFX(PL)=0
  5919.                   _PLOFY(PL)=0
  5920.                   _REDO=1
  5921.                End If 
  5922.                If _REDO=1
  5923.                   NTX=_PLX(PL)+_PLOFX(PL)-160
  5924.                   NTY=_PLY(PL)+_PLOFY(PL)-((_HEIGHT-(_NTSC*56))/2)
  5925.                   If NTX<0
  5926.                      Add _PLOFX(PL),-NTX
  5927.                   End If 
  5928.                   If NTX>639
  5929.                      Add _PLOFX(PL),639-NTX
  5930.                   End If 
  5931.                   If NTY<0
  5932.                      Add _PLOFY(PL),-NTY
  5933.                   End If 
  5934.                   If NTY>511-(_HEIGHT-(_NTSC*56))
  5935.                      Add _PLOFY(PL),511-(_HEIGHT-(_NTSC*56))-NTY
  5936.                   End If 
  5937.                End If 
  5938.             Until MK<>0
  5939.             _PLAYSAMP[5]
  5940.             
  5941.             ' NEW: 
  5942.             '  1 = fire/done 
  5943.             '  2 = power bar 
  5944.             '  3 = angle 
  5945.             '  4 = shop
  5946.             '  5 = map toggle
  5947.             '  6 = scroll
  5948.             '  7 = logo/recentre on tank 
  5949.             
  5950.             ' OLD: 
  5951.             '  1 = fire (1)
  5952.             '  2 = weapon list scroll down 
  5953.             '  3 = weapon list scroll up 
  5954.             '  4 = buy 
  5955.             '  5 = defense list scroll down  
  5956.             '  6 = defense list scroll up  
  5957.             '  7 = power bar (2) 
  5958.             '  8 = angle (3) 
  5959.             '  9 = map toggle (5)
  5960.             ' 10 = scroll left 
  5961.             ' 11 = scroll up 
  5962.             ' 12 = scroll right
  5963.             ' 13 = scroll down 
  5964.             ' 14 = recentre on tank (7)
  5965.             ' 15 = ADS done button (1) 
  5966.             
  5967.             If MK=2
  5968.                ' Scroll 
  5969.                _OLDX=X Mouse
  5970.                _OLDY=Y Mouse
  5971.                S=Screen
  5972.                Screen 0
  5973.                Limit Mouse 128,37 To 341,37+_HEIGHT-(_NTSC*56)
  5974.                X Mouse=128+((_PLX(PL)+_PLOFX(PL)-160)/3)
  5975.                Y Mouse=37+((_PLY(PL)+_PLOFY(PL)-((_HEIGHT-(_NTSC*56))/2))/3)
  5976.                Repeat 
  5977.                   Limit Mouse 128,37 To 341,37+((512-(_HEIGHT-(_NTSC*56)))/3)
  5978.                   NTX=(X Mouse-128)*3
  5979.                   NTY=(Y Mouse-37)*3
  5980.                   _PLOFX(PL)=NTX-_PLX(PL)+160
  5981.                   _PLOFY(PL)=NTY-_PLY(PL)+((_HEIGHT-(_NTSC*56))/2)
  5982.                   _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  5983.                Until Mouse Key=0
  5984.                Screen S
  5985.                Limit Mouse 128,251-(_NTSC*56) To 447,297-(_NTSC*56)
  5986.                X Mouse=_OLDX
  5987.                Y Mouse=_OLDY
  5988.                MK=10
  5989.             End If 
  5990.             
  5991.             If MK<10
  5992.                Repeat 
  5993.                   Limit Mouse 128,251-(_NTSC*56) To 447,297-(_NTSC*56)
  5994.                   _MOUSESTUFF[1]
  5995.                   M=Param
  5996.                   _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  5997.                Until Mouse Key=0
  5998.             Else 
  5999.                M=0
  6000.             End If 
  6001.             
  6002.             If M<>0
  6003.                _STX=X Mouse
  6004.                _STY=Y Mouse
  6005.                Bob Off 1
  6006.                Bob Update 
  6007.                Wait Vbl 
  6008.                If M=1
  6009.                   If _PREBUY=0
  6010.                      If _WEAPCOST(_PLWEAP(PL))<=_PLCASH(PL)
  6011.                         _REQUEST[PL,"Are you sure that you want","to fire your current weapon?",2]
  6012.                         If Param=1
  6013.                            _FIRE=1
  6014.                            Add _PLCASH(PL),-_WEAPCOST(_PLWEAP(PL))
  6015.                         End If 
  6016.                      Else 
  6017.                         _PLAYSAMP[8]
  6018.                         _REQUEST[PL,"Sorry, but you can't afford the currently","selected weapon. Please choose a cheaper one.",3]
  6019.                      End If 
  6020.                   Else 
  6021.                      _REQUEST[PL,"Are you sure that you're","ready to continue?",2]
  6022.                      If Param=1
  6023.                         _FIRE=-1
  6024.                      End If 
  6025.                   End If 
  6026.                   _STX=X Mouse
  6027.                   _STY=Y Mouse
  6028.                End If 
  6029.                If M=7
  6030.                   _PLOFX(PL)=0
  6031.                   _PLOFY(PL)=0
  6032.                   NTX=_PLX(PL)+_PLOFX(PL)-160
  6033.                   NTY=_PLY(PL)+_PLOFY(PL)-((_HEIGHT-(_NTSC*56))/2)
  6034.                   If NTX<0
  6035.                      Add _PLOFX(PL),-NTX
  6036.                   End If 
  6037.                   If NTX>639
  6038.                      Add _PLOFX(PL),639-NTX
  6039.                   End If 
  6040.                   If NTY<0
  6041.                      Add _PLOFY(PL),-NTY
  6042.                   End If 
  6043.                   If NTY>511-(_HEIGHT-(_NTSC*56))
  6044.                      Add _PLOFY(PL),511-(_HEIGHT-(_NTSC*56))-NTY
  6045.                   End If 
  6046.                End If 
  6047.                If M=4
  6048.                   ' Shop 
  6049.                   _DOSHOP[PL]
  6050.                   If Param=1
  6051.                      _FIRE=2
  6052.                   End If 
  6053.                End If 
  6054.                If M=2
  6055.                   _RESETPOINTS
  6056.                   _FIRST=1
  6057.                   Wait Vbl 
  6058.                   Repeat 
  6059.                      Limit Mouse 128,251-(_NTSC*56) To 378,297-(_NTSC*56)
  6060.                      PX=X
  6061.                      X=X Screen(X Mouse)
  6062.                      If _FIRST=1
  6063.                         X Mouse=X Hard(_PLPOWER(PL)/4)
  6064.                         _FIRST=0
  6065.                         PX=-1000
  6066.                      Else 
  6067.                         _PLPOWER(PL)=Min(999,Max(0,(X*4)))
  6068.                      End If 
  6069.                      If PX<>X
  6070.                         _UPDATEPOWER[PL]
  6071.                         _FIRST=0
  6072.                         Screen 0
  6073.                         _SELECTCOLOUR
  6074.                         _UPDATETRAINING[PL]
  6075.                         '                        Bob Update  
  6076.                      End If 
  6077.                      _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6078.                      Screen 1
  6079.                   Until Mouse Key<>0
  6080.                   Repeat 
  6081.                      Limit Mouse 128,251-(_NTSC*56) To 378,297-(_NTSC*56)
  6082.                      PX=X
  6083.                      X=X Screen(X Mouse)
  6084.                      _PLPOWER(PL)=Min(999,Max(0,(X*4)))
  6085.                      _UPDATEPOWER[PL]
  6086.                      If PX<>X
  6087.                         Screen 0
  6088.                         _SELECTCOLOUR
  6089.                         _UPDATETRAINING[PL]
  6090.                         '                        Bob Update  
  6091.                      End If 
  6092.                      _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6093.                      Wait Vbl 
  6094.                      Screen 1
  6095.                   Until Mouse Key=0
  6096.                   _REMOVEPOINTS
  6097.                   Screen 0
  6098.                   Bob Off 
  6099.                   Bob Update 
  6100.                   Wait Vbl 
  6101.                   Screen 1
  6102.                End If 
  6103.                If M=3
  6104.                   Screen 1
  6105.                   _FIRST=1
  6106.                   _RESETPOINTS
  6107.                   Repeat 
  6108.                      Limit Mouse 198,251-(_NTSC*56) To 378,297-(_NTSC*56)
  6109.                      PX=X
  6110.                      X=X Screen(X Mouse)
  6111.                      If _FIRST=1
  6112.                         X Mouse=X Hard(_PLANGLE(PL)+160)
  6113.                         _FIRST=0
  6114.                         PX=-1000
  6115.                      Else 
  6116.                         _PLANGLE(PL)=Min(90,Max(-90,X-160))
  6117.                      End If 
  6118.                      If PX<>X
  6119.                         _UPDATEANGLE[PL]
  6120.                         _FIRST=0
  6121.                         _TXS=Cos(_PLANGLE(PL)-90)*50
  6122.                         _TYS=Sin(_PLANGLE(PL)-90)*50
  6123.                         _UPDATEPOINT[_PLX(PL)+_TXS,_PLY(PL)+_TYS-6,0]
  6124.                         Screen 0
  6125.                         Bob 1,_PLX(PL)+_TXS-4,_PLY(PL)+_TYS-10,1207
  6126.                         _UPDATETRAINING[PL]
  6127.                         '                        Bob Update  
  6128.                      End If 
  6129.                      Screen 0
  6130.                      _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6131.                      _SELECTCOLOUR
  6132.                      Screen 1
  6133.                   Until Mouse Key<>0
  6134.                   Repeat 
  6135.                      Limit Mouse 198,251-(_NTSC*56) To 378,297-(_NTSC*56)
  6136.                      PX=X
  6137.                      X=X Screen(X Mouse)
  6138.                      _PLANGLE(PL)=Min(90,Max(-90,X-160))
  6139.                      _UPDATEANGLE[PL]
  6140.                      If PX<>X
  6141.                         _TXS=Cos(_PLANGLE(PL)-90)*50
  6142.                         _TYS=Sin(_PLANGLE(PL)-90)*50
  6143.                         _UPDATEPOINT[_PLX(PL)+_TXS,_PLY(PL)+_TYS-6,0]
  6144.                         Screen 0
  6145.                         Bob 1,_PLX(PL)+_TXS-4,_PLY(PL)+_TYS-10,1207
  6146.                         _UPDATETRAINING[PL]
  6147.                         '                        Bob Update  
  6148.                      End If 
  6149.                      Screen 0
  6150.                      _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6151.                      _SELECTCOLOUR
  6152.                      Screen 1
  6153.                   Until Mouse Key=0
  6154.                   _REMOVEPOINTS
  6155.                   Screen 0
  6156.                   Bob Off 
  6157.                   Bob Update 
  6158.                   Wait Vbl 
  6159.                   Screen 1
  6160.                End If 
  6161.                If M=5
  6162.                   If _PLMAP(PL)=0
  6163.                      _REMOVEINFO[PL]
  6164.                      _ADDMAP[PL]
  6165.                      _PLMAP(PL)=1
  6166.                   Else 
  6167.                      _REMOVEMAP[PL]
  6168.                      _ADDINFO[PL]
  6169.                      _PLMAP(PL)=0
  6170.                   End If 
  6171.                End If 
  6172.                X Mouse=_STX
  6173.                Y Mouse=_STY
  6174.             End If 
  6175.          Until _FIRE<>0
  6176.       Else 
  6177.          If _PLTYPE(PL)=2
  6178.             _ADDCOMPINFO[PL]
  6179.             If _PREBUY=1
  6180.                If _DEFENCECOST(0)<=_PLCASH(PL)
  6181.                   If _PLNUMPARACHUTES(PL)<2
  6182.                      Inc _PLNUMPARACHUTES(PL)
  6183.                      Add _PLCASH(PL),-_DEFENCECOST(0)
  6184.                   End If 
  6185.                End If 
  6186.                If _PLCASH(PL)>500 and _PLSHIELD(PL)<200
  6187.                   _SHIELDSUP[1,PL]
  6188.                   If Param=1
  6189.                      Add _PLCASH(PL),-_DEFENCECOST(2)
  6190.                   End If 
  6191.                End If 
  6192.             Else 
  6193.                _HTNH=0
  6194.                Repeat 
  6195.                   Inc _HTNH
  6196.                   _PLW=Rnd(_NUMWEAP-1)
  6197.                   _PLWC=_WEAPCODE(_PLW)
  6198.                   OKAY=0
  6199.                   If _CPUWEAP=0
  6200.                      OKAY=1
  6201.                   End If 
  6202.                   If _CPUWEAP=1
  6203.                      If _PLWC=0 or _PLWC=1 or _PLWC=4 or _PLWC=6 or _PLWC=7 or _PLWC=8 or _PLWC=11 or _PLWC=44
  6204.                         OKAY=1
  6205.                      End If 
  6206.                      If _PLWC=12 or _PLWC=24 or _PLWC=29 or _PLWC=30 or _PLWC=36 or _PLWC=37 or _PLWC=39 or _PLWC=41
  6207.                         OKAY=1
  6208.                      End If 
  6209.                   End If 
  6210.                   If _CPUWEAP=2
  6211.                      If _PLWC=0 or _PLWC=1 or _PLWC=6 or _PLWC=7 or _PLWC=8
  6212.                         OKAY=1
  6213.                      End If 
  6214.                   End If 
  6215.                Until(_WEAPCOST(_PLW)<=_PLCASH(PL) and OKAY=1) or _HTNH>500
  6216.                If _HTNH>500
  6217.                   _PLW=0
  6218.                End If 
  6219.                _PLWEAP(PL)=_PLW
  6220.                Add _PLCASH(PL),-_WEAPCOST(_PLWEAP(PL))
  6221.                MXHIT=0
  6222.                MXPOWER=0
  6223.                MXANGLE=0
  6224.                ANGLE=_PLANGLE(PL)
  6225.                POWER=_PLPOWER(PL)
  6226.                For _DONE=1 To _IQ/3
  6227.                   _CALCULATEHITPOS[_PLX(PL),_PLY(PL),ANGLE,POWER]
  6228.                   _EVALUATEHEALTH[_HITX,_HITY,PL]
  6229.                   If Param>MXHIT
  6230.                      MXHIT=Param
  6231.                      MXPOWER=POWER
  6232.                      MXANGLE=ANGLE
  6233.                   End If 
  6234.                   _UPDATEDONE[_DONE]
  6235.                   ANGLE=Rnd(180)-90
  6236.                   POWER=Rnd(999)
  6237.                Next 
  6238.                If MXHIT>0
  6239.                   _PLPOWER(PL)=MXPOWER
  6240.                   _PLANGLE(PL)=MXANGLE
  6241.                   _FIRE=1
  6242.                Else 
  6243.                   _PLHEALTH(PL)=-1
  6244.                   _PLALIVE(PL)=0
  6245.                   _FIRE=-1
  6246.                   _PLAYSAMP[9]
  6247.                End If 
  6248.             End If 
  6249.             _REMOVECOMPINFO
  6250.          End If 
  6251.          _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6252.       End If 
  6253.       _REMOVEPOINTER
  6254.       If _PLTYPE(PL)=1
  6255.          Screen 1
  6256.          Bob Off 1
  6257.          Bob Update 
  6258.          Wait Vbl 
  6259.          If _PLMAP(PL)=1
  6260.             _REMOVEMAP[PL]
  6261.          Else 
  6262.             _REMOVEINFO[PL]
  6263.          End If 
  6264.          For _HEIGHT=207 To 256
  6265.             _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6266.          Next 
  6267.          _UPDATESCREEN_WAIT[PL]
  6268.          _HEIGHT=256
  6269.       End If 
  6270.       
  6271.       If _FIRE=1
  6272.          _DOFIRE[PL]
  6273.       End If 
  6274.    End If 
  6275. End Proc
  6276.  
  6277. Procedure _SHOP_UPDATECASH[PL]
  6278.    S=Screen
  6279.    Screen 1
  6280.    Bob Clear 
  6281.    Screen Copy 1,280,235+68,314,235+73 To 1,280,68
  6282.    _NUMTOSTRING[_PLCASH(PL),6]
  6283.    P$=Param$
  6284.    _DOTEXT[281,68,P$,0]
  6285.    Bob Draw 
  6286.    Screen S
  6287. End Proc
  6288.  
  6289. Procedure _SHOP_UPDATEINFO[PL]
  6290.    S=Screen
  6291.    Screen 1
  6292.    X=X Screen(X Mouse)
  6293.    Y=Y Screen(Y Mouse)
  6294.    C=(X-6)/63
  6295.    R=(Y-56)/11
  6296.    If C>=0 and C<=3 and R>=0 and R<=7
  6297.       N=_PLSHOPPOS(PL)+(C*8)+R
  6298.       If N<>_PRN
  6299.          Bob Clear 
  6300.          Screen Copy 1,280,235+126,314,235+131 To 1,280,126
  6301.          Ink 15,0,0
  6302.          Bar 262,76 To 312,122
  6303.          _GETTYPE[N]
  6304.          If Param=2
  6305.             ' Weapon 
  6306.             _NUMTOSTRING[_WEAPCOST(N-_NUMDEFENCE),6]
  6307.             P$=Param$
  6308.             _DOTEXT[281,126,P$,0]
  6309.             Restore _WEAPONDAT
  6310.             For Z=0 To N-_NUMDEFENCE
  6311.                Read A$
  6312.                Read B$
  6313.                Read C$
  6314.                Read D$
  6315.                Read E$
  6316.                Read F$
  6317.                Read G$
  6318.             Next 
  6319.             _DOTEXT[264,78,A$,0]
  6320.             _DOTEXT[264,78+6,B$,0]
  6321.             _DOTEXT[264,78+12,C$,0]
  6322.             _DOTEXT[264,78+18,D$,0]
  6323.             _DOTEXT[264,78+24,E$,0]
  6324.             _DOTEXT[264,78+30,F$,0]
  6325.             _DOTEXT[264,78+36,G$,0]
  6326.          Else 
  6327.             If Param=1
  6328.                ' Defence item 
  6329.                _NUMTOSTRING[_DEFENCECOST(N),6]
  6330.                P$=Param$
  6331.                _DOTEXT[281,126,P$,0]
  6332.                Restore _DEFENCEDAT
  6333.                For Z=0 To N
  6334.                   Read A$
  6335.                   Read B$
  6336.                   Read C$
  6337.                   Read D$
  6338.                   Read E$
  6339.                   Read F$
  6340.                   Read G$
  6341.                Next 
  6342.                _DOTEXT[264,78,A$,0]
  6343.                _DOTEXT[264,78+6,B$,0]
  6344.                _DOTEXT[264,78+12,C$,0]
  6345.                _DOTEXT[264,78+18,D$,0]
  6346.                _DOTEXT[264,78+24,E$,0]
  6347.                _DOTEXT[264,78+30,F$,0]
  6348.                _DOTEXT[264,78+36,G$,0]
  6349.             End If 
  6350.          End If 
  6351.          Bob Draw 
  6352.          _PRN=N
  6353.       End If 
  6354.    Else 
  6355.       If _PRN<>-1
  6356.          Bob Clear 
  6357.          Screen Copy 1,280,235+126,314,235+131 To 1,280,126
  6358.          Ink 15,0,0
  6359.          Bar 262,76 To 312,122
  6360.          Bob Draw 
  6361.          _PRN=-1
  6362.       End If 
  6363.    End If 
  6364.    Screen S
  6365.    
  6366.    _DEFENCEDAT:
  6367.    Data "Parachute:"
  6368.    Data "Stops you"
  6369.    Data "from losing"
  6370.    Data "health if"
  6371.    Data "you fall."
  6372.    Data ""
  6373.    Data "You have"+Str$(_PLNUMPARACHUTES(PL))
  6374.    
  6375.    Data "Deflector"
  6376.    Data "shield:"
  6377.    Data "Deflects any"
  6378.    Data "rounds that"
  6379.    Data "come near +"
  6380.    Data "offers some"
  6381.    Data "shielding."
  6382.    
  6383.    Data "Light"
  6384.    Data "Shield:"
  6385.    Data "Offers light"
  6386.    Data "protection"
  6387.    Data "from attack."
  6388.    Data ""
  6389.    Data ""
  6390.    
  6391.    Data "Heavy"
  6392.    Data "Shield:"
  6393.    Data "Offers heavy"
  6394.    Data "protection"
  6395.    Data "from attack."
  6396.    Data ""
  6397.    Data ""
  6398.    
  6399.    Data "Surrender:"
  6400.    Data "Click here"
  6401.    Data "to give up"
  6402.    Data "for this"
  6403.    Data "round."
  6404.    Data "NB: Last"
  6405.    Data "resort only!"
  6406.    
  6407.    
  6408.    _WEAPONDAT:
  6409.    Data "Baby"
  6410.    Data "Missile:"
  6411.    Data "Not very"
  6412.    Data "powerful -"
  6413.    Data "but it is"
  6414.    Data "free."
  6415.    Data ""
  6416.    
  6417.    Data "Riot charge:"
  6418.    Data "Same size as"
  6419.    Data "a missile."
  6420.    Data "Damages"
  6421.    Data "scenery but"
  6422.    Data "not tanks."
  6423.    Data ""
  6424.    
  6425.    Data "Missile:"
  6426.    Data "Like a baby"
  6427.    Data "missile but"
  6428.    Data "larger and"
  6429.    Data "more"
  6430.    Data "powerful."
  6431.    Data ""
  6432.    
  6433.    Data "Heavy riot"
  6434.    Data "charge:"
  6435.    Data "Same size as"
  6436.    Data "a nuke."
  6437.    Data "Damages"
  6438.    Data "scenery but"
  6439.    Data "not tanks."
  6440.    
  6441.    Data "Roller:"
  6442.    Data "Rolls. If it"
  6443.    Data "goes uphill"
  6444.    Data "or hits tank"
  6445.    Data "it explodes"
  6446.    Data "like a baby"
  6447.    Data "missile."
  6448.    
  6449.    Data "Dirt spray:"
  6450.    Data "A stream of"
  6451.    Data "mud is fired"
  6452.    Data "from the"
  6453.    Data "turret of"
  6454.    Data "your tank."
  6455.    Data ""
  6456.    
  6457.    Data "Tunneller:"
  6458.    Data "Continues"
  6459.    Data "through the"
  6460.    Data "ground. When"
  6461.    Data "it reappears"
  6462.    Data "it blows up"
  6463.    Data "like missile."
  6464.    
  6465.    Data "Mud Slinger:"
  6466.    Data "Launches a"
  6467.    Data "fountain of"
  6468.    Data "mud upwards"
  6469.    Data "on impact."
  6470.    Data ""
  6471.    Data ""
  6472.    
  6473.    Data "Homing"
  6474.    Data "Missile:"
  6475.    Data "Like baby"
  6476.    Data "missile but"
  6477.    Data "slows as it"
  6478.    Data "passes over"
  6479.    Data "opponents."
  6480.    
  6481.    Data "Bouncer:"
  6482.    Data "Bounces on"
  6483.    Data "1st impact,"
  6484.    Data "detonates as"
  6485.    Data "missile on"
  6486.    Data "2nd impact."
  6487.    Data ""
  6488.    
  6489.    Data "Heavy"
  6490.    Data "Roller:"
  6491.    Data "Like a"
  6492.    Data "roller, but"
  6493.    Data "explodes"
  6494.    Data "like a"
  6495.    Data "missile."
  6496.    
  6497.    Data "Flood:"
  6498.    Data "Liquid"
  6499.    Data "floods from"
  6500.    Data "point of"
  6501.    Data "impact and"
  6502.    Data "then"
  6503.    Data "solidifies."
  6504.    
  6505.    Data "Triple"
  6506.    Data "Missile:"
  6507.    Data "Fires three"
  6508.    Data "missiles at"
  6509.    Data "once."
  6510.    Data ""
  6511.    Data ""
  6512.    
  6513.    Data "Psycho:"
  6514.    Data "Unaffected"
  6515.    Data "by angle of"
  6516.    Data "turret."
  6517.    Data "Fires 5"
  6518.    Data "missiles at"
  6519.    Data "once."
  6520.    
  6521.    Data "Large Flood:"
  6522.    Data "Like flood,"
  6523.    Data "but with"
  6524.    Data "more liquid."
  6525.    Data ""
  6526.    Data ""
  6527.    Data ""
  6528.    
  6529.    Data "Mega Riot"
  6530.    Data "Charge: Acts"
  6531.    Data "as missile"
  6532.    Data "for 1st sec."
  6533.    Data "Then becomes"
  6534.    Data "5 heavy riot"
  6535.    Data "charges."
  6536.    
  6537.    Data "Pile Driver:"
  6538.    Data "Drills a big"
  6539.    Data "pit into the"
  6540.    Data "ground at"
  6541.    Data "the point of"
  6542.    Data "impact."
  6543.    Data ""
  6544.    
  6545.    Data "Baby Nuke:"
  6546.    Data "Same size as"
  6547.    Data "a missile,"
  6548.    Data "but with"
  6549.    Data "double the"
  6550.    Data "hit radius."
  6551.    Data ""
  6552.    
  6553.    Data "Cluster bomb"
  6554.    Data "(5): Acts as"
  6555.    Data "missile for"
  6556.    Data "1st second."
  6557.    Data "Then becomes"
  6558.    Data "5 baby"
  6559.    Data "missiles."
  6560.    
  6561.    Data "Mega"
  6562.    Data "Tunneller:"
  6563.    Data "As tunneller"
  6564.    Data "but with"
  6565.    Data "baby nukes"
  6566.    Data "instead."
  6567.    Data ""
  6568.    
  6569.    Data "Mountain"
  6570.    Data "Mover: Acts"
  6571.    Data "as missile"
  6572.    Data "for 1st sec."
  6573.    Data "Then become"
  6574.    Data "10 heavy"
  6575.    Data "riot charge."
  6576.    
  6577.    Data "Mega Roller:"
  6578.    Data "Like a"
  6579.    Data "roller, but"
  6580.    Data "explodes"
  6581.    Data "like a baby"
  6582.    Data "nuke."
  6583.    Data ""
  6584.    
  6585.    Data "Transporter:"
  6586.    Data "Your tank is"
  6587.    Data "transported"
  6588.    Data "to the point"
  6589.    Data "of impact."
  6590.    Data ""
  6591.    Data ""
  6592.    
  6593.    Data "Burrower:"
  6594.    Data "Drills into"
  6595.    Data "the point of"
  6596.    Data "impact using"
  6597.    Data "6 heavy riot"
  6598.    Data "charges."
  6599.    Data ""
  6600.    
  6601.    Data "Mega"
  6602.    Data "Bouncer:"
  6603.    Data "As bouncer,"
  6604.    Data "but explodes"
  6605.    Data "like a baby"
  6606.    Data "nuke."
  6607.    Data ""
  6608.    
  6609.    Data "Random:"
  6610.    Data "Picks weapon"
  6611.    Data "at random."
  6612.    Data "Whatever is"
  6613.    Data "chosen, you"
  6614.    Data "only get"
  6615.    Data "charged 150."
  6616.    
  6617.    Data "Nuke:"
  6618.    Data "Twice the"
  6619.    Data "power and"
  6620.    Data "size of a"
  6621.    Data "baby nuke."
  6622.    Data ""
  6623.    Data ""
  6624.    
  6625.    Data "Cluster bomb"
  6626.    Data "(10): Acts"
  6627.    Data "as a missile"
  6628.    Data "for 1st sec."
  6629.    Data "Then becomes"
  6630.    Data "10 baby"
  6631.    Data "missiles."
  6632.    
  6633.    Data "Fountain:"
  6634.    Data "Detonates"
  6635.    Data "into 8 baby"
  6636.    Data "missiles at"
  6637.    Data "point of"
  6638.    Data "impact."
  6639.    Data ""
  6640.    
  6641.    Data "Leapfrog:"
  6642.    Data "Bounces 3"
  6643.    Data "times,"
  6644.    Data "exploding as"
  6645.    Data "a missile at"
  6646.    Data "each point."
  6647.    Data ""
  6648.    
  6649.    Data "Lightning:"
  6650.    Data "Causes a"
  6651.    Data "lightning"
  6652.    Data "bolt to hit"
  6653.    Data "the point of"
  6654.    Data "impact."
  6655.    Data ""
  6656.    
  6657.    Data "Laser:"
  6658.    Data "Shoots a"
  6659.    Data "laser beam"
  6660.    Data "from your"
  6661.    Data "turret. Not"
  6662.    Data "effected by"
  6663.    Data "gravity."
  6664.    
  6665.    Data "Napalm:"
  6666.    Data "Like flood,"
  6667.    Data "but damages"
  6668.    Data "tanks and"
  6669.    Data "vanishes"
  6670.    Data "afterwards."
  6671.    Data ""
  6672.    
  6673.    Data "Mega Nuke:"
  6674.    Data "Quadruple"
  6675.    Data "the power"
  6676.    Data "and size of"
  6677.    Data "a baby nuke."
  6678.    Data ""
  6679.    Data ""
  6680.    
  6681.    Data "Heavy"
  6682.    Data "Fountain:"
  6683.    Data "Explodes"
  6684.    Data "into 10"
  6685.    Data "missile at"
  6686.    Data "the point of"
  6687.    Data "impact."
  6688.    
  6689.    Data "Splitter:"
  6690.    Data "Spreads five"
  6691.    Data "baby nukes"
  6692.    Data "horizontally"
  6693.    Data "at the point"
  6694.    Data "of impact."
  6695.    Data ""
  6696.    
  6697.    Data "Death's"
  6698.    Data "Head: Acts"
  6699.    Data "as missile"
  6700.    Data "for 1st sec."
  6701.    Data "Then becomes"
  6702.    Data "5 baby"
  6703.    Data "nukes."
  6704.    
  6705.    Data "Large"
  6706.    Data "Napalm:"
  6707.    Data "As napalm,"
  6708.    Data "but more of"
  6709.    Data "it."
  6710.    Data ""
  6711.    Data ""
  6712.    
  6713.    Data "Mega Death's"
  6714.    Data "Head: Acts"
  6715.    Data "as missile"
  6716.    Data "for 1st sec."
  6717.    Data "Then becomes"
  6718.    Data "5 nukes."
  6719.    Data ""
  6720.    
  6721.    Data "Power"
  6722.    Data "Driver:"
  6723.    Data "Drives a"
  6724.    Data "chain of 6"
  6725.    Data "nukes along"
  6726.    Data "the current"
  6727.    Data "trajectory."
  6728.    
  6729.    Data "Mega"
  6730.    Data "Fountain:"
  6731.    Data "Detonates"
  6732.    Data "into 10 baby"
  6733.    Data "nukes at the"
  6734.    Data "point of"
  6735.    Data "impact."
  6736.    
  6737.    Data "Mega"
  6738.    Data "Splitter:"
  6739.    Data "As splitter,"
  6740.    Data "but with"
  6741.    Data "nukes"
  6742.    Data "instead."
  6743.    Data ""
  6744.    
  6745.    Data "Electrify"
  6746.    Data "Ground:"
  6747.    Data "Damages"
  6748.    Data "everyone"
  6749.    Data "visible at"
  6750.    Data "the moment"
  6751.    Data "of impact."
  6752.    
  6753.    Data "Devastator:"
  6754.    Data "Acts as"
  6755.    Data "missile for"
  6756.    Data "1st second."
  6757.    Data "Then becomes"
  6758.    Data "5 mega"
  6759.    Data "nukes."
  6760.    
  6761.    Data "End of the"
  6762.    Data "World: Acts"
  6763.    Data "as missile"
  6764.    Data "for 1st sec."
  6765.    Data "Then becomes"
  6766.    Data "10 mega"
  6767.    Data "nukes."
  6768.    
  6769. End Proc
  6770.  
  6771. Procedure _REQUEST[PL,_TXT1$,_TXT2$,_TYPE]
  6772.    ' _TYPE: 0 = Shop Yes/No 
  6773.    '        1 = Shop Confirm
  6774.    '        2 = Main Yes/No 
  6775.    '        3 = Main Confirm
  6776.    
  6777.    ' Output: 1 = Yes
  6778.    '         2 = No 
  6779.    
  6780.    ' _KIND: 0 = Yes/No
  6781.    '        1 = Confirm 
  6782.    
  6783.    If _TYPE<2
  6784.       DY=81
  6785.    Else 
  6786.       DY=6
  6787.    End If 
  6788.    If _TYPE=1 or _TYPE=3
  6789.       _KIND=1
  6790.    Else 
  6791.       _KIND=0
  6792.    End If 
  6793.    
  6794.    S=Screen
  6795.    Screen 1
  6796.    
  6797.    Bob Clear 
  6798.    
  6799.    Get Bob 1,NNN+1,63,DY To 256,DY+38
  6800.    
  6801.    Screen Copy 1,0,149,192,186 To 1,63,DY
  6802.    If _KIND=1
  6803.       Screen Copy 1,38,158,67,172 To 1,68,17+DY
  6804.       Screen Copy 1,114,168,143,182 To 1,220,17+DY
  6805.       Screen Copy 1,209,161,253,175 To 1,137,17+DY
  6806.    End If 
  6807.    _DOTEXT[161-(Len(_TXT1$)*2),DY+5,_TXT1$,0]
  6808.    _DOTEXT[161-(Len(_TXT2$)*2),DY+11,_TXT2$,0]
  6809.    
  6810.    Bob Draw 
  6811.    
  6812.    Repeat 
  6813.       Repeat 
  6814.          If _TYPE<2
  6815.             Limit Mouse 128,201-(_NTSC*56) To 447,297-(_NTSC*56)
  6816.          Else 
  6817.             Limit Mouse 128,251-(_NTSC*56) To 447,297-(_NTSC*56)
  6818.          End If 
  6819.          MK=Mouse Key
  6820.          If MK=0
  6821.             _MOUSESTUFF2[0,DY,_KIND]
  6822.          Else 
  6823.             _MOUSESTUFF2[1,DY,_KIND]
  6824.          End If 
  6825.          M=Param
  6826.          _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6827.       Until MK<>0
  6828.       
  6829.       _PLAYSAMP[5]
  6830.       
  6831.       Repeat 
  6832.          If _TYPE<2
  6833.             Limit Mouse 128,201-(_NTSC*56) To 447,297-(_NTSC*56)
  6834.          Else 
  6835.             Limit Mouse 128,251-(_NTSC*56) To 447,297-(_NTSC*56)
  6836.          End If 
  6837.          _MOUSESTUFF2[1,DY,_KIND]
  6838.          M=Param
  6839.          _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6840.       Until Mouse Key=0
  6841.    Until M<>0
  6842.    
  6843.    Screen 1
  6844.    
  6845.    Bob Clear 
  6846.    Ink 0,0,0
  6847.    Bar 63,DY To 255,DY+37
  6848.    Paste Bob 63,DY,NNN+1
  6849.    Del Bob NNN+1
  6850.    Bob Draw 
  6851.    
  6852.    Screen S
  6853. End Proc[M]
  6854.  
  6855. Procedure _MOUSESTUFF2[_STATE,DY,_KIND]
  6856.    Screen 1
  6857.    X=X Screen(X Mouse)
  6858.    Y=Y Screen(Y Mouse)
  6859.    M=0
  6860.    If _KIND=0
  6861.       If X>=68 and Y>=17+DY and X<=96 and Y<=30+DY
  6862.          M=1
  6863.       End If 
  6864.       If X>=220 and Y>=17+DY and X<=248 and Y<=30+DY
  6865.          M=2
  6866.       End If 
  6867.    End If 
  6868.    If _KIND=1
  6869.       If X>=137 and Y>=17+DY and X<=181 and Y<=30+DY
  6870.          M=1
  6871.       End If 
  6872.    End If 
  6873.    _UPDATE_MOUSEPOINTER[M,_STATE]
  6874. End Proc[M]
  6875.  
  6876.  
  6877. Procedure _DOSHOP[PL]
  6878.    _ADDSHOP[PL]
  6879.    
  6880.    '  8 = Shop: scroll left 
  6881.    '  9 = Shop: scroll right
  6882.    ' 10 = Shop: done
  6883.    ' 11 = Shop: item list area
  6884.    _SPECIAL=0
  6885.    Repeat 
  6886.       Repeat 
  6887.          Limit Mouse 128,201-(_NTSC*56) To 447,297-(_NTSC*56)
  6888.          MK=Mouse Key
  6889.          If MK=0
  6890.             _MOUSESTUFF[0]
  6891.          Else 
  6892.             _MOUSESTUFF[1]
  6893.          End If 
  6894.          M=Param
  6895.          _SHOP_UPDATEINFO[PL]
  6896.          _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6897.       Until MK<>0
  6898.       
  6899.       _PLAYSAMP[5]
  6900.       
  6901.       If M=11
  6902.          Repeat 
  6903.             Limit Mouse 128,201-(_NTSC*56) To 447,297-(_NTSC*56)
  6904.             _MOUSESTUFF[1]
  6905.             M=Param
  6906.             _SHOP_UPDATEINFO[PL]
  6907.             _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  6908.          Until Mouse Key=0
  6909.          If M=11
  6910.             ' Item list area 
  6911.             Screen 1
  6912.             C=(X Screen(X Mouse)-6)/63
  6913.             R=(Y Screen(Y Mouse)-56)/11
  6914.             If C>=0 and C<=3 and R>=0 and R<=7
  6915.                N=_PLSHOPPOS(PL)+(C*8)+R
  6916.                _GETTYPE[N]
  6917.                If Param=2
  6918.                   ' Select weapon
  6919.                   If _WEAPCOST(N-_NUMDEFENCE)>_PLCASH(PL)
  6920.                      _PLAYSAMP[8]
  6921.                      _REQUEST[PL,"Sorry, but you can't afford that weapon.","Please choose a cheaper one.",1]
  6922.                   Else 
  6923.                      Bob Off 1
  6924.                      Bob Update 
  6925.                      Wait Vbl 
  6926.                      _SHOP_DESELECT[_PLWEAP(PL)+_NUMDEFENCE-_PLSHOPPOS(PL)]
  6927.                      _SHOP_SELECT[N-_PLSHOPPOS(PL)]
  6928.                      _PLWEAP(PL)=N-_NUMDEFENCE
  6929.                   End If 
  6930.                Else 
  6931.                   If Param=1
  6932.                      ' Buy defence item 
  6933.                      If _DEFENCECOST(N)<=_PLCASH(PL)
  6934.                         _BROUGHT=0
  6935.                         If N=0
  6936.                            If _PLNUMPARACHUTES(PL)<999
  6937.                               _REQUEST[PL,"Are you sure you want","to buy a parachute?",0]
  6938.                               If Param=1
  6939.                                  Inc _PLNUMPARACHUTES(PL)
  6940.                                  _BROUGHT=1
  6941.                               Else 
  6942.                                  _BROUGHT=-1
  6943.                               End If 
  6944.                            End If 
  6945.                         End If 
  6946.                         If N=1
  6947.                            _REQUEST[PL,"Are you sure you want to buy and","use a new deflector shield?",0]
  6948.                            If Param=1
  6949.                               _SHIELDSUP[3,PL]
  6950.                               If Param=1
  6951.                                  _BROUGHT=2
  6952.                               End If 
  6953.                            Else 
  6954.                               _BROUGHT=-1
  6955.                            End If 
  6956.                         End If 
  6957.                         If N=2
  6958.                            _REQUEST[PL,"Are you sure you want to buy and","use a new light shield?",0]
  6959.                            If Param=1
  6960.                               _SHIELDSUP[1,PL]
  6961.                               If Param=1
  6962.                                  _BROUGHT=2
  6963.                               End If 
  6964.                            Else 
  6965.                               _BROUGHT=-1
  6966.                            End If 
  6967.                         End If 
  6968.                         If N=3
  6969.                            _REQUEST[PL,"Are you sure you want to buy and","use a new heavy shield?",0]
  6970.                            If Param=1
  6971.                               _SHIELDSUP[2,PL]
  6972.                               If Param=1
  6973.                                  _BROUGHT=2
  6974.                               End If 
  6975.                            Else 
  6976.                               _BROUGHT=-1
  6977.                            End If 
  6978.                         End If 
  6979.                         If N=4
  6980.                            _REQUEST[PL,"Are you sure that you","want to surrender?",0]
  6981.                            If Param=1
  6982.                               _PLHEALTH(PL)=-1
  6983.                               _PLALIVE(PL)=0
  6984.                               _BROUGHT=1
  6985.                               M=10
  6986.                               _SPECIAL=1
  6987.                            Else 
  6988.                               _BROUGHT=-1
  6989.                            End If 
  6990.                         End If 
  6991.                         If _BROUGHT>0
  6992.                            If N<>4
  6993.                               Add _PLCASH(PL),-_DEFENCECOST(_PLDEFENCE(PL))
  6994.                               Bob Off 1
  6995.                               Bob Update 
  6996.                               Wait Vbl 
  6997.                               _SHOP_REFRESH[PL]
  6998.                               _PRN=-1
  6999.                               If N=0
  7000.                                  _SHOP_UPDATEINFO[PL]
  7001.                               End If 
  7002.                               If _BROUGHT=1
  7003.                                  _PLAYSAMP[9]
  7004.                               End If 
  7005.                            End If 
  7006.                         Else 
  7007.                            If _BROUGHT=0
  7008.                               _PLAYSAMP[8]
  7009.                               If N=0
  7010.                                  _REQUEST[PL,"Sorry, but you're not allowed to","buy more than 999 parachutes.",1]
  7011.                               Else 
  7012.                                  _REQUEST[PL,"Sorry, but you're not allowed to have","more than one of those!",1]
  7013.                               End If 
  7014.                            End If 
  7015.                         End If 
  7016.                      Else 
  7017.                         _PLAYSAMP[8]
  7018.                         _REQUEST[PL,"Sorry, but you don't have enough money","to purchase that item.",1]
  7019.                      End If 
  7020.                   End If 
  7021.                End If 
  7022.             End If 
  7023.          End If 
  7024.       End If 
  7025.       
  7026.       Screen 1
  7027.       If M=8
  7028.          ' Scroll left
  7029.          Bob Clear 
  7030.          If _PLSHOPPOS(PL)>=8
  7031.             Add _PLSHOPPOS(PL),-8
  7032.             Screen Copy 1,4,56,251,142 To 1,11,56
  7033.             Ink 15,0,0
  7034.             Bar 6,56 To 10,142
  7035.             For Z=1 To 7
  7036.                Wait Vbl 
  7037.                Screen Copy 1,4,56,250,142 To 1,12,56
  7038.             Next 
  7039.             _SHOP_DRAWCOLUMN[PL,0]
  7040.          End If 
  7041.          Bob Draw 
  7042.       End If 
  7043.       If M=9
  7044.          Bob Clear 
  7045.          ' Scroll right 
  7046.          If _PLSHOPPOS(PL)+33<=(_NUMDEFENCE+_NUMWEAP-1)
  7047.             Add _PLSHOPPOS(PL),8
  7048.             Screen Copy 1,12,56,258,142 To 1,5,56
  7049.             Ink 15,0,0
  7050.             Bar 251,56 To 258,142
  7051.             For Z=1 To 7
  7052.                Wait Vbl 
  7053.                Screen Copy 1,12,56,258,142 To 1,4,56
  7054.             Next 
  7055.             _SHOP_DRAWCOLUMN[PL,3]
  7056.          End If 
  7057.          Bob Draw 
  7058.       End If 
  7059.       
  7060.       If M=10
  7061.          If _WEAPCOST(_PLWEAP(PL))>_PLCASH(PL)
  7062.             _PLAYSAMP[8]
  7063.             _REQUEST[PL,"Sorry, but you can't afford the currently","selected weapon. Please choose a cheaper one.",1]
  7064.             M=0
  7065.          End If 
  7066.       End If 
  7067.    Until M=10
  7068.    
  7069.    _REMOVESHOP[PL]
  7070.    
  7071.    ' 0 = clicked on done button 
  7072.    ' 1 = surrendered
  7073.    ' 2 = pressed escape 
  7074. End Proc[_SPECIAL]
  7075.  
  7076. Procedure _GETTYPE[N]
  7077.    ' 0 = Illegal
  7078.    ' 1 = Defence
  7079.    ' 2 = Weapon 
  7080.    If N>=0 and N<=(_NUMDEFENCE+_NUMWEAP-1)
  7081.       If N<_NUMDEFENCE
  7082.          T=1
  7083.       Else 
  7084.          T=2
  7085.       End If 
  7086.    Else 
  7087.       T=0
  7088.    End If 
  7089. End Proc[T]
  7090.  
  7091. Procedure _GETNAME[N]
  7092.    _GETTYPE[N]
  7093.    If Param=1
  7094.       T$=_DEFENCE$(N)
  7095.    Else 
  7096.       If Param=2
  7097.          T$=_WEAP$(N-_NUMDEFENCE)
  7098.       Else 
  7099.          T$=""
  7100.       End If 
  7101.    End If 
  7102. End Proc[T$]
  7103.  
  7104. Procedure _SHOP_SELECT[N]
  7105.    If N>=0 and N<=32
  7106.       C=N/8
  7107.       R=N-(C*8)
  7108.       X=(C*63)+6
  7109.       Y=(R*11)+56
  7110.       Ink 0,0,0
  7111.       Draw X,Y To X+59,Y
  7112.       Draw X,Y+1 To X,Y+7
  7113.       Ink 4,0,0
  7114.       Draw X+1,Y+8 To X+60,Y+8
  7115.       Draw X+60,Y+1 To X+60,Y+7
  7116.    End If 
  7117. End Proc
  7118.  
  7119. Procedure _SHOP_DESELECT[N]
  7120.    If N>=0 and N<=32
  7121.       C=N/8
  7122.       R=N-(C*8)
  7123.       X=(C*63)+6
  7124.       Y=(R*11)+56
  7125.       Ink 4,0,0
  7126.       Draw X,Y To X+59,Y
  7127.       Draw X,Y+1 To X,Y+7
  7128.       Ink 0,0,0
  7129.       Draw X+1,Y+8 To X+60,Y+8
  7130.       Draw X+60,Y+1 To X+60,Y+7
  7131.    End If 
  7132. End Proc
  7133.  
  7134. Procedure _SHOP_DRAWCOLUMN[PL,C]
  7135.    S=Screen
  7136.    Screen 1
  7137.    ' 5,55 To 256,141  
  7138.    X=(C*63)+6
  7139.    N=_PLSHOPPOS(PL)+(C*8)
  7140.    For Y=56 To 133 Step 11
  7141.       '      Ink 0,0,0 
  7142.       '      Box X,Y To X+60,Y+8 
  7143.       ' 0 - (_numdefence-1) - (_numdefence+_numweap-1) 
  7144.       _AFFORD=0
  7145.       _GETTYPE[N]
  7146.       If Param=2
  7147.          Ink 2,0,0
  7148.          Bar X+1,Y+1 To X+59,Y+7
  7149.          If N-_NUMDEFENCE=_PLWEAP(PL)
  7150.             Ink 0,0,0
  7151.          Else 
  7152.             Ink 4,0,0
  7153.          End If 
  7154.          Draw X,Y To X+59,Y
  7155.          Draw X,Y+1 To X,Y+7
  7156.          If N-_NUMDEFENCE=_PLWEAP(PL)
  7157.             Ink 4,0,0
  7158.          Else 
  7159.             Ink 0,0,0
  7160.          End If 
  7161.          Draw X+1,Y+8 To X+60,Y+8
  7162.          Draw X+60,Y+1 To X+60,Y+7
  7163.           Extension_12_0394 X+60,Y,2
  7164.           Extension_12_0394 X,Y+8,2
  7165.          If _PLCASH(PL)>=_WEAPCOST(N-_NUMDEFENCE)
  7166.             _AFFORD=1
  7167.          End If 
  7168.       Else 
  7169.          If Param=1
  7170.             Ink 4,0,0
  7171.             Bar X+1,Y+1 To X+59,Y+7
  7172.             Ink 6,0,0
  7173.             Draw X,Y To X+59,Y
  7174.             Draw X,Y+1 To X,Y+7
  7175.             Ink 2,0,0
  7176.             Draw X+1,Y+8 To X+60,Y+8
  7177.             Draw X+60,Y+1 To X+60,Y+7
  7178.              Extension_12_0394 X+60,Y,4
  7179.              Extension_12_0394 X,Y+8,4
  7180.             If _PLCASH(PL)>=_DEFENCECOST(N)
  7181.                _AFFORD=1
  7182.             End If 
  7183.          End If 
  7184.       End If 
  7185.       _GETNAME[N]
  7186.       P$=Param$
  7187.       If Len(P$)>14
  7188.          P$=Left$(P$,12)+".."
  7189.       End If 
  7190.       If _AFFORD=1
  7191.          _DOTEXT[X+31-(Len(P$)*2),Y+2,P$,0]
  7192.       Else 
  7193.          _DOTEXT2[X+31-(Len(P$)*2),Y+2,P$,5]
  7194.       End If 
  7195.       Inc N
  7196.    Next 
  7197.    Screen S
  7198. End Proc
  7199.  
  7200. Procedure _SHOP_REFRESH[PL]
  7201.    For Z=0 To 3
  7202.       _SHOP_DRAWCOLUMN[PL,Z]
  7203.    Next 
  7204.    _SHOP_UPDATECASH[PL]
  7205. End Proc
  7206.  
  7207. Procedure _ADDSHOP[PL]
  7208.    ' Remove standard stuff
  7209.    If _PLMAP(PL)=1
  7210.       _REMOVEMAP[PL]
  7211.    Else 
  7212.       _REMOVEINFO[PL]
  7213.    End If 
  7214.    For _HEIGHT=208 To 256 Step 4
  7215.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  7216.    Next 
  7217.    _HEIGHT=256
  7218.    ' Add shop 
  7219.    Screen Copy 1,0,285,320,334 To 1,0,0
  7220.    Screen Copy 1,0,50,320,149 To 1,0,285
  7221.    _SHOPPING=1
  7222.    _SHOP_REFRESH[PL]
  7223.    Screen Offset 1,0,50
  7224.    For _HEIGHT=255 To 157 Step -4
  7225.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  7226.    Next 
  7227.    _HEIGHT=157
  7228. End Proc
  7229.  
  7230. Procedure _REMOVESHOP[PL]
  7231.    ' Remove shop  
  7232.    For _HEIGHT=158 To 256 Step 4
  7233.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  7234.    Next 
  7235.    _HEIGHT=256
  7236.    ' Add standard stuff 
  7237.    Screen Copy 1,0,285,320,384 To 1,0,50
  7238.    Screen Copy 1,0,0,320,49 To 1,0,285
  7239.    _SHOPPING=0
  7240.    _UPDATEPOWER[PL]
  7241.    _UPDATEANGLE[PL]
  7242.    _UPDATEOTHERS[PL]
  7243.    If _PREBUY=1
  7244.       Screen Copy 1,192,161,208,177 To 1,123,25
  7245.    End If 
  7246.    Screen Offset 1,0,0
  7247.    For _HEIGHT=255 To 207 Step -4
  7248.       _UPDATESCREEN[_PLX(PL)+_PLOFX(PL),_PLY(PL)+_PLOFY(PL)]
  7249.    Next 
  7250.    _HEIGHT=207
  7251.    If _PLMAP(PL)=1
  7252.       _ADDMAP[PL]
  7253.    Else 
  7254.       _ADDINFO[PL]
  7255.    End If 
  7256. End Proc
  7257.  
  7258. Procedure _DOAPEX
  7259.    Unpack 20 To 0
  7260.    Screen Hide 0
  7261.    Wait Vbl 
  7262.    Screen Display 0,128,300,320,168
  7263.    Screen Show 0
  7264.    Wait Vbl 
  7265.    Led Off 
  7266.    Track Play 19
  7267.    Wait 5
  7268.    Y=400
  7269.    YS=0
  7270.    Repeat 
  7271.       Add Y,YS
  7272.       Dec YS
  7273.       Screen Display 0,128,Y,320,168
  7274.       Wait Vbl 
  7275.    Until Y<40
  7276.    _VVOY=Y
  7277.    T=Timer
  7278.    Erase 1
  7279.    Screen Open 1,320,50,8,Lowres
  7280.    Screen Hide 1
  7281.    Screen To Front 1
  7282.    Flash Off 
  7283.    Curs Off 
  7284.    For Z=0 To 7
  7285.       Colour Z,$F0
  7286.    Next 
  7287.    Screen Display 1,128,184+_PALADD,320,50
  7288.    Dim _LETTERSX1(15,4),_LETTERSY1(15,4),_LETTERSX2(15,4),_LETTERSY2(15,4),_PCX(15,4),_PCY(15,4)
  7289.    Restore _WRITDAT
  7290.    For _LETTER=1 To 16
  7291.       _ADX=((_LETTER-1)*15)+42
  7292.       For _LINE=1 To 5
  7293.          Read X1
  7294.          Read Y1
  7295.          Read X2
  7296.          Read Y2
  7297.          If X1=-1
  7298.             _LETTERSX1(_LETTER-1,_LINE-1)=-1
  7299.          Else 
  7300.             _LETTERSX1(_LETTER-1,_LINE-1)=(X1/2)+_ADX
  7301.             _LETTERSY1(_LETTER-1,_LINE-1)=(Y1/2)+12
  7302.             _LETTERSX2(_LETTER-1,_LINE-1)=(X2/2)+_ADX
  7303.             _LETTERSY2(_LETTER-1,_LINE-1)=(Y2/2)+12
  7304.          End If 
  7305.       Next 
  7306.    Next 
  7307.    Cls 0
  7308.    For TX=2 To 319 Step 5
  7309.       For Y=0 To 6
  7310.           Extension_12_0394 TX,Y,Max(1,Y)
  7311.       Next 
  7312.    Next 
  7313.    Get Bob 1,1,0,0 To 320,7
  7314.    Cls 0
  7315.    For Y=2 To 47 Step 5
  7316.       For X=0 To 11
  7317.           Extension_12_0394 X,Y,Max(1,X-5)
  7318.       Next 
  7319.    Next 
  7320.    Get Bob 1,2,0,0 To 12,50
  7321.    Cls 0
  7322.    Screen Show 1
  7323.    Fade 1,$20,$40,$60,$80,$A0,$C0,$E0,$F0
  7324.    Wait 15
  7325.    For N=0 To 55
  7326.       Paste Bob(N*6)-5,0,2
  7327.       Paste Bob 0,N-5,1
  7328.       Wait Vbl 
  7329.    Next 
  7330.    _STEPS=20
  7331.    For Z=0 To _STEPS
  7332.       For _LETTER=1 To 16
  7333.          For _LINE=1 To 5
  7334.             If _LETTERSX1(_LETTER-1,_LINE-1)<>-1
  7335.                XD=_LETTERSX2(_LETTER-1,_LINE-1)-_LETTERSX1(_LETTER-1,_LINE-1)
  7336.                CX=((XD*Z)/_STEPS)+_LETTERSX1(_LETTER-1,_LINE-1)
  7337.                YD=_LETTERSY2(_LETTER-1,_LINE-1)-_LETTERSY1(_LETTER-1,_LINE-1)
  7338.                CY=((YD*Z)/_STEPS)+_LETTERSY1(_LETTER-1,_LINE-1)
  7339.                If _PCX(_LETTER-1,_LINE-1)<>CX or _PCY(_LETTER-1,_LINE-1)<>CY
  7340.                   For ADX=-1 To 1
  7341.                      For ADY=-1 To 1
  7342.                         P= Extension_12_0470(CX+ADX,CY+ADY)
  7343.                         Inc P
  7344.                          Extension_12_0394 CX+ADX,CY+ADY,Min(7,P)
  7345.                      Next 
  7346.                   Next 
  7347.                End If 
  7348.                _PCX(_LETTER-1,_LINE-1)=CX
  7349.                _PCY(_LETTER-1,_LINE-1)=CY
  7350.             End If 
  7351.          Next 
  7352.       Next 
  7353.       Wait Vbl 
  7354.    Next 
  7355.    
  7356.    Wait Max(1,170-(Timer-T))
  7357.    For Z=0 To 7
  7358.       Colour Z,$FFF
  7359.    Next 
  7360.    Cls 1
  7361.    Ink 0,0,0
  7362.    Draw 0,49 To 320,49
  7363.    Wait Vbl 
  7364.    Colour 0,$0
  7365.    Fade 1,,$0,$0,$0,$0,$0,$0,$0
  7366.    Ink 0,0,0
  7367.    For N=0 To 22 Step 2
  7368.       For ADN=0 To 1
  7369.          Draw 0,N+ADN To 319,N+ADN
  7370.          Draw 0,48-N-ADN To 319,48-N-ADN
  7371.       Next 
  7372.       Wait Vbl 
  7373.    Next 
  7374.    Ink 0,0,0
  7375.    For ADX=0 To 128 Step 32
  7376.       Draw 0,24 To ADX,24
  7377.       Draw 320,24 To 320-ADX,24
  7378.       Wait Vbl 
  7379.    Next 
  7380.    Screen Close 1
  7381.    Y=_VVOY
  7382.    YS=0
  7383.    Repeat 
  7384.       Add Y,YS
  7385.       Dec YS
  7386.       Screen Display 0,128,Y,320,168
  7387.       Wait Vbl 
  7388.    Until Y<-100
  7389.    Screen Close 0
  7390.    If _NTSC=1
  7391.       Wait 25
  7392.    End If 
  7393.    Track Stop 
  7394.    If Prg State<>1
  7395.       Erase 19
  7396.       Erase 20
  7397.    End If 
  7398.    
  7399.    _WRITDAT:
  7400.    Data 0,0,0,40,0,0,20,0,20,0,20,20,0,20,20,20,0,0,0,0
  7401.    Data 0,20,20,20,0,20,0,40,-1,0,0,0,-1,0,0,0,-1,0,0,0
  7402.    Data 0,20,20,20,0,20,0,40,0,40,20,40,20,20,20,40,-1,0,0,0
  7403.    Data 0,20,0,40,0,40,20,40,20,40,20,20,-1,0,0,0,-1,0,0,0
  7404.    Data 0,20,20,20,0,20,0,40,0,40,20,40,20,40,20,0,-1,0,0,0
  7405.    Data 10,0,10,40,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0
  7406.    Data 0,20,0,40,0,40,20,40,0,60,20,60,20,20,20,60,-1,0,0,0
  7407.    Data -1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0,-1,0,0,0
  7408.    Data 0,0,0,40,0,0,20,0,20,0,20,20,0,20,20,20,0,0,0,0
  7409.    Data 0,20,20,20,0,20,0,40,-1,0,0,0,-1,0,0,0,-1,0,0,0
  7410.    Data 0,20,20,20,0,20,0,40,0,30,20,30,20,20,20,30,0,40,20,40
  7411.    Data 0,20,20,20,0,20,0,30,0,30,20,30,20,30,20,40,20,40,0,40
  7412.    Data 0,20,20,20,0,20,0,40,0,30,20,30,20,20,20,30,0,40,20,40
  7413.    Data 0,20,0,40,0,20,20,20,20,20,20,40,-1,0,0,0,-1,0,0,0
  7414.    Data 0,0,0,40,0,40,20,40,0,20,20,20,-1,0,0,0,-1,0,0,0
  7415.    Data 0,20,20,20,0,20,0,30,0,30,20,30,20,30,20,40,20,40,0,40
  7416. End Proc
  7417.  
  7418. Procedure _UPDATETRAINING[PL]
  7419.    If _TRAINING=1
  7420.       _CALCULATEHITPOS[_PLX(PL),_PLY(PL),_PLANGLE(PL),_PLPOWER(PL)]
  7421.       _UPDATEPOINT[_HITX,_HITY,1]
  7422.       Bob 2,_HITX-4,_HITY-4,1207
  7423.    End If 
  7424. End Proc
  7425.  
  7426. Procedure _SELECTCOLOUR
  7427.    If _TIME<2 and _BITMAPLEVEL=0
  7428.       Colour 8,$0
  7429.    Else 
  7430.       Colour 8,$FFF
  7431.    End If 
  7432. End Proc
  7433.  
  7434. Procedure _LOADMAP[_NUM]
  7435.    _SCREWED=0
  7436.    If Exist(_LEVELSDISK$+_LEVEL$(_ROUND(_ROUND))+".MAP")
  7437.       Trap Load Iff _LEVELSDISK$+_LEVEL$(_ROUND(_ROUND))+".MAP",_NUM
  7438.       If Errtrap=0
  7439.          Screen Hide _NUM
  7440.          If Screen Width<>960 or(Screen Height<>512 and Screen Height<>350) or Screen Colour>8
  7441.             ' IFF not 960*512*2  
  7442.             _ERROR[2]
  7443.             _SCREWED=1
  7444.          End If 
  7445.       Else 
  7446.          ' File not IFF - or out of memory
  7447.          _ERROR[1]
  7448.          _SCREWED=1
  7449.       End If 
  7450.    Else 
  7451.       ' File not found 
  7452.       _ERROR[0]
  7453.       _SCREWED=1
  7454.    End If 
  7455. End Proc[_SCREWED]
  7456.  
  7457. Procedure _ERROR[_NUM]
  7458.    Unpack 18 To 7
  7459.    Screen Hide 7
  7460.    Screen Open _FREESCREEN,640,300,16,Hires
  7461.    Screen Hide _FREESCREEN
  7462.    Screen Display _FREESCREEN,128,30,320,300
  7463.    Flash Off 
  7464.    Curs Off 
  7465.    Cls 0
  7466.    For Z=0 To 15
  7467.       Colour Z,$0
  7468.    Next 
  7469.    Screen Copy 7,214,46,480,196 To _FREESCREEN,187,63
  7470.    Screen Copy 7,22,45,207,80 To _FREESCREEN,225,112
  7471.    Screen Copy 7,40,250,500,260 To _FREESCREEN,225,32
  7472.    Screen Copy 7,40,263+(_NUM*13),500,273+(_NUM*13) To _FREESCREEN,50,232
  7473.    Screen Show _FREESCREEN
  7474.    Screen To Front _FREESCREEN
  7475.    View 
  7476.    Wait Vbl 
  7477.    Fade 1 To 7
  7478.    Screen Close 7
  7479.    T=Timer+500
  7480.    Repeat 
  7481.       Wait Vbl 
  7482.    Until Timer>T or Mouse Key<>0
  7483.    Fade 1
  7484.    Wait 15
  7485.    Screen Close _FREESCREEN
  7486. End Proc
  7487.  
  7488. Procedure _DORAINBOW
  7489.    Restore _PLCOLSDAT
  7490.    Set Rainbow 0,1,140,"","",""
  7491.    For SY=0 To 120 Step 20
  7492.       Read _COL
  7493.       For AY=0 To 19
  7494.          Rain(0,SY+AY)=_COL
  7495.       Next 
  7496.    Next 
  7497.    Rainbow 0,0,142-(_NTSC*43),140
  7498.    _PLCOLSDAT:
  7499.    Data $F0,$F,$FF0,$F00,$F0F,$FF,$F70
  7500. End Proc
  7501.  
  7502. Procedure _FLOOD[_TYP,SX,SY]
  7503.    Screen 0
  7504.    If _AUDIO=1
  7505.       Sam Stop 
  7506.       Sam Loop On 
  7507.    End If 
  7508.    _PLAYSAMP[13]
  7509.    If _TYP=31 or _TYP=33
  7510.       Palette ,,,,,,,,,$F,$3F,$6F,$9F,$6F,$3F,$F
  7511.    Else 
  7512.       Palette ,,,,,,,,,$F00,$F30,$F60,$F90,$F60,$F30,$F00
  7513.    End If 
  7514.    If Rnd(1)=1
  7515.       Shift Up 2,9,15,1
  7516.    Else 
  7517.       Shift Down 2,9,15,1
  7518.    End If 
  7519.    _FINDYPOS[SX,SY]
  7520.    SY=Param
  7521.    _COL=9
  7522.    If _TYP=31 or _TYP=32
  7523.       _NUM=2000
  7524.    Else 
  7525.       _NUM=4000
  7526.    End If 
  7527.    T=Timer
  7528.    _PREV=1
  7529.    _AVX=0
  7530.    _AVY=0
  7531.    Dim SSTX(_NUM),SSTY(_NUM)
  7532.    For N=1 To _NUM
  7533.       Add _COL,1,9 To 15
  7534.        Extension_12_0394 SX,SY,_COL
  7535.       SSTX(N)=SX
  7536.       SSTY(N)=SY
  7537.       Add _AVX,SX
  7538.       Add _AVY,SY
  7539.       If Extension_12_0470(SX,SY+1)=0
  7540.          Inc SY
  7541.       Else 
  7542.          _DIST=0
  7543.          _CHECKLEFT=1
  7544.          _CHECKRIGHT=1
  7545.          _FOUND=0
  7546.          Repeat 
  7547.             Inc _DIST
  7548.             If _CHECKLEFT=1
  7549.                P= Extension_12_0470(SX-_DIST,SY)
  7550.                If P=0
  7551.                   Add SX,-_DIST
  7552.                   _CHECKLEFT=0
  7553.                   _CHECKRIGHT=0
  7554.                   _FOUND=1
  7555.                Else 
  7556.                   If P<=7
  7557.                      _CHECKLEFT=0
  7558.                   End If 
  7559.                End If 
  7560.             End If 
  7561.             If _CHECKRIGHT=1
  7562.                P= Extension_12_0470(SX+_DIST,SY)
  7563.                If P=0
  7564.                   Add SX,_DIST
  7565.                   _CHECKLEFT=0
  7566.                   _CHECKRIGHT=0
  7567.                   _FOUND=1
  7568.                Else 
  7569.                   If P<=7
  7570.                      _CHECKRIGHT=0
  7571.                   End If 
  7572.                End If 
  7573.             End If 
  7574.          Until _CHECKLEFT=0 and _CHECKRIGHT=0
  7575.       End If 
  7576.       If _FOUND=0
  7577.          Dec SY
  7578.       End If 
  7579.       If Timer>T
  7580.          S=_SKIPVBL
  7581.          _SKIPVBL=1
  7582.          _UPDATESCREEN[_AVX/N,_AVY/N]
  7583.          _SKIPVBL=S
  7584.          T=Timer
  7585.       End If 
  7586.    Next 
  7587.    If _TYPE<>-1 and _SKIPVBL=0
  7588.       Wait 50
  7589.    End If 
  7590.    If _TYP=31 or _TYP=33
  7591.       For N=1 To _NUM
  7592.           Extension_12_0394 SSTX(N),SSTY(N),Rnd(3)+1
  7593.       Next 
  7594.    Else 
  7595.       For N=1 To _NUM
  7596.          X=SSTX(N)
  7597.          Y=SSTY(N)
  7598.          For Z=0 To 6
  7599.             _WORKOUTHEALTHLOSS[X,Y,_PLX(Z),_PLY(Z),5]
  7600.             LOSS=Param
  7601.             _LOOSEHEALTH[Z,LOSS]
  7602.          Next 
  7603.           Extension_12_0394 X,Y,0
  7604.       Next 
  7605.    End If 
  7606.    If _AUDIO=1
  7607.       Sam Loop Off 
  7608.    End If 
  7609. End Proc
  7610.  
  7611. Procedure _FINDYPOS[X,SY]
  7612.    For TY=SY To 512
  7613.       If Extension_12_0470(X,TY)<>0 and Extension_12_0470(X,TY)<8
  7614.          SY=TY-1
  7615.          TY=512
  7616.       End If 
  7617.    Next 
  7618.    For TY=SY To 0 Step -1
  7619.       If Extension_12_0470(X,TY)=0
  7620.          SY=TY
  7621.          TY=-1
  7622.       End If 
  7623.    Next 
  7624. End Proc[SY]
  7625.  
  7626. Procedure _FLASH
  7627.    Screen 0
  7628.    Dim C(15)
  7629.    For Z=1 To 15
  7630.       C(Z)=Colour(Z)
  7631.    Next 
  7632.    For Z=1 To 15
  7633.       Colour Z,$FFF
  7634.    Next 
  7635.    _PLAYSAMP[13]
  7636.    Fade 2,,C(1),C(2),C(3),C(4),C(5),C(6),C(7),C(8),C(9),C(10),C(11),C(12),C(13),C(14),C(15)
  7637. End Proc
  7638.  
  7639. Procedure _OUTOFMEMORY[_CHIP,_FAST]
  7640.    Amos To Back 
  7641.    _MES$="You need an extra"
  7642.    If _CHIP>0
  7643.       _MES$=_MES$+Str$(_CHIP/1024)+"K of chip mem"
  7644.       If _FAST>0
  7645.          _MES$=_MES$+", and an extra"
  7646.       End If 
  7647.    End If 
  7648.    If _FAST>0
  7649.       _MES$=_MES$+Str$(_FAST/1024)+"K of chip/fast mem"
  7650.    End If 
  7651.    _MES$=_MES$+"."
  7652.    N= Extension_18_09D6("Warning: Not enough memory to execute correctly!",_MES$,"If you click on 'ignore' the game may work for a while, but will","probably eventually exit with an 'Out of Memory' error.","Ignore","Quit")
  7653.    If N=False
  7654.       End 
  7655.    Else 
  7656.       Amos To Front 
  7657.    End If 
  7658. End Proc
  7659.  
  7660. Procedure _RESETPOINTS
  7661.    _OLDC(0)=-1
  7662.    _OLDC(1)=-1
  7663. End Proc
  7664.  
  7665. Procedure _UPDATEPOINT[NX,NY,_NUM]
  7666.    S=Screen
  7667.    Screen 2
  7668.    If _OLDC(_NUM)<>-1
  7669.        Extension_12_0394 _OLDX(_NUM),_OLDY(_NUM),_OLDC(_NUM)
  7670.    End If 
  7671.    _OLDX(_NUM)=(NX/8)+194
  7672.    _OLDY(_NUM)=(NY/8)+4
  7673.    P= Extension_12_0470(_OLDX(_NUM),_OLDY(_NUM))
  7674.    If P=7
  7675.       _OLDC(_NUM)=-1
  7676.    Else 
  7677.       _OLDC(_NUM)=P
  7678.        Extension_12_0394 _OLDX(_NUM),_OLDY(_NUM),7
  7679.    End If 
  7680.    Screen S
  7681. End Proc
  7682.  
  7683. Procedure _REMOVEPOINTS
  7684.    S=Screen
  7685.    Screen 2
  7686.    For Z=0 To 1
  7687.       If _OLDC(Z)<>-1
  7688.           Extension_12_0394 _OLDX(Z),_OLDY(Z),_OLDC(Z)
  7689.       End If 
  7690.    Next 
  7691.    Screen S
  7692. End Proc
  7693.  
  7694. Procedure _DOFALOGO
  7695.    
  7696.    ' Precalculate random numbers for fire generator 
  7697.    Reserve As Work 13+20,8192
  7698.    For Z=0 To 4095
  7699.       Poke Start(13+20)+Z,Rnd(2)
  7700.       Poke Start(13+20)+Z+4096,Rnd(2)-1
  7701.    Next 
  7702.    
  7703.    ' Setup the chunky screen
  7704.    _CHUNKY_INIT
  7705.    
  7706.    Unpack 12 To 1
  7707.    Screen Hide 1
  7708.    Screen Copy 1,48,2,48+224,2+47 To 0,48,45
  7709.    Screen 0
  7710.    Screen Swap 
  7711.    Screen Copy 1,48,2,48+224,2+47 To 0,48,45
  7712.    Sam Play %1111,7,12000
  7713.    Fade 3,$0,$222,$444,$888,$BBB,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF,$FFF
  7714.    Wait 45
  7715.    Fade 4,$0,$300,$500,$700,$910,$A20,$B30,$C40,$D60,$E80,$FA0,$FB3,$FC6,$FD9,$FEC,$FFF
  7716.    T=Timer+85
  7717.    
  7718.    Areg(0)=Start(14+20)+81920
  7719.    Areg(1)=Start(20+15+_ALTER)
  7720.    Areg(2)=Start(13+20)
  7721.    Dreg(0)=0
  7722.    Dreg(1)=0
  7723.    Dreg(2)=Rnd(4095)
  7724.    _FIRE
  7725.    Screen 1
  7726.    _DEST=Start(14+20)+81920+(45*320)+48
  7727.    For Y=0 To 46
  7728.       For X=0 To 223
  7729.          P= Extension_12_0470(X+48,Y+2)
  7730.          Poke _DEST,P
  7731.          Inc _DEST
  7732.       Next 
  7733.       Add _DEST,96
  7734.    Next 
  7735.    Screen Close 1
  7736.    Screen 0
  7737.    
  7738.    ' Main loop
  7739.    _ALTER=0
  7740.    SSY=45
  7741.    N=0
  7742.    _VOL=0
  7743.    
  7744.    While Timer<T
  7745.       Multi Wait 
  7746.    Wend 
  7747.    
  7748.    Volume 0
  7749.    Sam Loop On 
  7750.    Sam Play 15
  7751.    
  7752.    Repeat 
  7753.       
  7754.       Inc N
  7755.       
  7756.       If 10*Int(N/10)=N
  7757.          If SSY<100
  7758.             Inc SSY
  7759.          End If 
  7760.       End If 
  7761.       If N<65
  7762.          If _VOL<63
  7763.             Inc _VOL
  7764.             Volume _VOL
  7765.          End If 
  7766.       End If 
  7767.       If N>395
  7768.          If _VOL>0
  7769.             Dec _VOL
  7770.             Volume _VOL
  7771.          End If 
  7772.       End If 
  7773.       
  7774.       
  7775.       Areg(0)=Start(14+20)+81920
  7776.       Areg(1)=Start(20+15+_ALTER)+((SSY-40)*40)
  7777.       Areg(2)=Start(20+13)
  7778.       Dreg(0)=SSY-40
  7779.       Dreg(1)=SSY
  7780.       Dreg(2)=Rnd(4095)
  7781.       _FIRE
  7782.       Wait Vbl 
  7783.       Screen Swap 
  7784.       _ALTER=1-_ALTER
  7785.       
  7786.    Until N>460
  7787.    
  7788.    Sam Stop 
  7789.    Sam Loop Off 
  7790.    Volume 63
  7791.    
  7792.    _CHUNKY_REMOVE
  7793.    
  7794. End Proc
  7795.  
  7796. Procedure _CHUNKY_INIT
  7797.    Reserve As Work 14+20,245760
  7798.    Reserve As Chip Work 15+20,81920
  7799.    Reserve As Chip Work 16+20,81920
  7800.    Screen Open 0,320,256,16,Lowres
  7801.    Screen Display 0,128,62+(_PALADD/2),320,100
  7802.    Cls 0
  7803.    Flash Off 
  7804.    Curs Off 
  7805.    Cls 0
  7806.    Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  7807.    
  7808.    Double Buffer 
  7809.    Autoback 0
  7810.    Bob Update Off 
  7811.    _CHUNKY_SB=Screen Base
  7812.    For Z=0 To 11
  7813.       _CHUNKY_STORE(Z)=Leek((Z*4)+_CHUNKY_SB)
  7814.    Next 
  7815.    Break Off 
  7816.    For PL=0 To 3
  7817.       Loke _CHUNKY_SB+(PL*4),Start(15+20)+(PL*10240)
  7818.       Loke _CHUNKY_SB+(PL*4)+48,Start(15+20)+(PL*10240)
  7819.    Next 
  7820.    For PL=0 To 3
  7821.       Loke _CHUNKY_SB+(PL*4)+24,Start(16+20)+(PL*10240)
  7822.    Next 
  7823.    View 
  7824.    Wait Vbl 
  7825. End Proc
  7826.  
  7827. Procedure _CHUNKY_REMOVE
  7828.    For Z=0 To 11
  7829.       Loke(Z*4)+_CHUNKY_SB,_CHUNKY_STORE(Z)
  7830.    Next 
  7831.    Break On 
  7832.    Erase 14+20
  7833.    Erase 15+20
  7834.    Erase 16+20
  7835.    Screen Close 0
  7836. End Proc
  7837.  
  7838. Procedure _FIRE
  7839.    ' COMPILED PROCEDURE -- can't convert this to AMOS code
  7840. End Proc
  7841.  
  7842.  
  7843. _WEAPDAT:
  7844. Data "Baby missile",0,0
  7845. Data "Riot charge",10,13
  7846. Data "Missile",20,1
  7847. Data "Heavy riot charge",20,14
  7848. Data "Roller",25,21
  7849. Data "Dirt spray",30,16
  7850. Data "Tunneller",35,2
  7851. Data "Mud slinger",40,15
  7852. Data "Homing missile",50,3
  7853. Data "Bouncer",50,42
  7854. Data "Heavy roller",50,22
  7855. Data "Flood",50,38
  7856. Data "Triple missile",60,4
  7857. Data "Psycho",60,5
  7858. Data "Large flood",75,40
  7859. Data "Mega riot charge",80,26
  7860. Data "Pile driver",100,31
  7861. Data "Baby nuke",100,6
  7862. Data "Clstr bomb (5)",125,9
  7863. Data "Mega tunneller",125,35
  7864. Data "Mountain mover",125,27
  7865. Data "Mega Roller",140,28
  7866. Data "Transporter",150,23
  7867. Data "Burrower",150,32
  7868. Data "Mega bouncer",150,43
  7869. Data "Random",150,33
  7870. Data "Nuke",200,7
  7871. Data "Clstr bomb(10)",200,10
  7872. Data "Fountain",200,11
  7873. Data "Leapfrog",200,12
  7874. Data "Lightning",250,24
  7875. Data "Laser",350,25
  7876. Data "Napalm",400,39
  7877. Data "Mega nuke",400,8
  7878. Data "Heavy fountain",400,29
  7879. Data "Splitter",650,36
  7880. Data "Death's head",750,17
  7881. Data "Large napalm",750,41
  7882. Data "Mega dths head",1000,18
  7883. Data "Power driver",1000,34
  7884. Data "Mega fountain",1000,30
  7885. Data "Mega splitter",1200,37
  7886. Data "Electrify grnd",1250,44
  7887. Data "Devastator",1800,19
  7888. Data "End of the wld",2500,20
  7889. Data "END"
  7890. '*****12345678901234567890***  
  7891.  
  7892. _DEFENCEDAT:
  7893. Data "Parachute",50
  7894. Data "Deflector shield",100
  7895. Data "Light shield",200
  7896. Data "Heavy shield",300
  7897. Data "Surrender",0
  7898. Data "END"
  7899.  
  7900. _PLAYERDAT:
  7901. Data "Egbert the conqueror",1
  7902. Data "Barry the slightly nasty",2
  7903. Data "Harold the mildly annoying",2
  7904. Data "Humperdink the reasonably brutal",2
  7905. Data "Rupert the almighty warrior of evil",2
  7906. Data "Vincent the irritating git",2
  7907. Data "Ted the occasionally cruel",2
  7908. '*****1234567890123456789012345678901234567890***
  7909.  
  7910. _EDGEDAT:
  7911. Data "Wrap-around"
  7912. Data "Bouncy"
  7913. Data "Concrete"
  7914. Data "Springy"
  7915.  
  7916. '1=Whistling wind
  7917. '2=Bounce
  7918. '3=Big expl. 
  7919. '4=Small expl. 
  7920. '5=Click 
  7921. '6=Lightning 
  7922. '7=Beam up 
  7923. '8=Buy unsuccessful
  7924. '9=Buy successful
  7925. '10=Fire 
  7926. '11=Laser                                      
  7927. '12=Shields up                                                                   
  7928. '13=Electricity
  7929. '14=Boing  
  7930.  
  7931. 'Shield types:0=none, 1=light, 2=heavy, 3=deflector